我必须帮助我的一个朋友,但我忘记了一点C.:\那个代码的问题是什么?必须有一些指针错误。它给了我违反阅读记忆的Access。可能是什么问题呢?主要任务是:2个无限阵列,并且必须计算一个avarge。
编辑版:阅读没问题,但可以很好地传递。我记得我不应该返回一个指针,我可以返回一个计数器来计算连接到A和B数组的数量吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double *bekerdezo1(double *a){
char line[64];
double value = 0;
int n = 0;
while ((fgets(line, sizeof line, stdin) != NULL) && (line[0] != '\n')){
if (sscanf(line, "%lf", &value) == 1){
a =(double*)malloc(sizeof(*a) *(n+1));
a[n] = value;
printf("%lf",a[n]);
n = n++;
}
else {
break;
}
}
return a;
}
double *bekerdezo2(double *b){
double value = 0;
char line[64];
int n = 0;
while ((fgets(line, sizeof line, stdin) != NULL) && (line[0] != '\n')){
if (sscanf(line, "%lf", &value) == 1){
b = (double*)malloc(sizeof(*b) *(n+1));
b[n] = value;
printf("%lf",b[n]);
n = n++;
} else {
break;
}
}
return b;
}
int main(void)
{
double reszq = 0,vegosszeg=0, tarolo = 0;
int i = 0;
size_t *n = 0;
double *a=NULL, *b = NULL;
bekerdezo1(a);
bekerdezo2(b);
for(i=0;i<100; i++)
{
reszq = 0;
tarolo = (a[i])*(b[i]);
reszq = tarolo/a[i];
vegosszeg = vegosszeg + reszq;
}
printf("vegosszeg=", vegosszeg);
return 0;
}
答案 0 :(得分:2)
在 main()中,您可以访问全局变量 a &amp; B'/ em>的。这些指针尚未正确分配。 bekerdezo1()&amp;中分配的内存 bekerdezo2()分配给局部变量,而不是全局变量。
bekerdezo2()然后将局部变量返回给main,但从未分配给全局变量 b 。 另一方面, bekerdezo1()返回全局变量 b (我认为这是一个错误,它应该返回本地变量 a )。
bekerdezo2()中指针 n 的访问中存在另一个错误。该指针尚未正确初始化/分配。
main()中的for循环也不会检查实际输入了多少元素,但尝试从所有100个元素中读取。
您还需要验证 a &amp; b 包含相同数量的元素。或者至少只循环直到其中一个读取的最小nr。
我建议删除所有全局变量,并使它们成为 main()的局部变量,这将帮助您(和编译器)找到这样的错误。