C 指针错误?访问违反内存读取

C 指针错误?访问违反内存读取,c,C,我必须帮助我的一个朋友,但我忘记了一点C:\那代码有什么问题?一定有指针错误。它给了我一个读取内存的权限。有什么问题吗?主要任务是:2个无限数组,并且必须计算一个数组 编辑版本:阅读正常,但可以通过文字检查。我记得我不应该返回指针,我可以返回一个计数器来计算连接到a和B数组的数字吗 #include <stdio.h> #include <stdlib.h> #include <string.h> double *bekerdezo1(double

我必须帮助我的一个朋友,但我忘记了一点C:\那代码有什么问题?一定有指针错误。它给了我一个读取内存的权限。有什么问题吗?主要任务是:2个无限数组,并且必须计算一个数组

编辑版本:阅读正常,但可以通过文字检查。我记得我不应该返回指针,我可以返回一个计数器来计算连接到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;
}
#包括
#包括
#包括
双*bekerdezo1(双*a){
字符行[64];
双值=0;
int n=0;
而((fgets(line,sizeof line,stdin)!=NULL)和&(line[0]!='\n')){
如果(sscanf(行、%lf、&value)==1){
a=(双*)malloc(sizeof(*a)*(n+1));
a[n]=值;
printf(“%lf”,a[n]);
n=n++;
} 
否则{
打破
}
}
返回a;
}
双*bekerdezo2(双*b){
双值=0;
字符行[64];
int n=0;
而((fgets(line,sizeof line,stdin)!=NULL)和&(line[0]!='\n')){
如果(sscanf(行、%lf、&value)==1){
b=(双*)malloc(sizeof(*b)*(n+1));
b[n]=值;
printf(“%lf”,b[n]);
n=n++;
}否则{
打破
}
}
返回b;
}
内部主(空)
{
双reszq=0,vegosszeg=0,tarolo=0;
int i=0;
尺寸_t*n=0;
双精度*a=NULL,*b=NULL;
bekerdezo1(a);
bekerdezo2(b);
对于main()中的(i=0;i),您可以访问全局变量a&b。这些是未正确分配的指针。
bekerdezo1()和bekerdezo2()中分配的内存分配给局部变量,而不是全局变量

然后,bekerdezo2()将局部变量返回main,但从未分配给全局变量b。 另一方面,bekerdezo1()返回全局变量b(我假设这是一个错误,它实际上应该返回局部变量a)

访问bekerdezo2()中的指针n时还存在另一个错误。该指针也未正确初始化/分配

main()中的for循环也不会检查实际输入了多少元素,而是尝试从所有100个元素中读取

您还需要验证a&b是否包含相同数量的元素,或者至少只循环,直到其中一个元素读取最小的nr


我建议删除main()的所有全局变量,并将其设置为局部变量,这将帮助您(和编译器)找到类似这样的错误。

Oops!没有看到@pzaenger