2015-12-08 68 views
0

我必须帮助我的一个朋友,但我已经忘记了一点C.:\该代码有什么问题?必须有一些指针错误。它给了我一个访问违反阅读记忆。可能是什么问题呢?主要任务是:2个无限数组,并且必须计算一个数组。指针错误?访问违反内存读取

编辑版本:阅读是好的,但可以通过literaly罚款。正如我记得我不应该返回一个指针,我可以返回一个计数器来计算附加到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

哎呀!没有看到@pzaenger – Cherubim

回答

2

的main()您访问的全局变量一个 & b。这些指针没有正确分配。 在中分配的内存bekerdezo1() & bekerdezo2()被分配给局部变量,而不是全局变量。

bekerdezo2()然后返回局部变量回主,但从来没有分配给全局变量b。另一方面返回全局变量b(我认为这是一个错误,它真的应该返回本地变量a)。

在指针Ñbekerdezo2()接入然而存在其他错误。这个指针还没有被正确地初始化/分配。

而且在for循环中的main()不检查有多少元素被真正进入,但试图从所有100

你也想验证来读取一个 & b包含相同数量的元素。或者至少只循环到其中一个读取的最小nr。

我建议删除所有的全局变量,并使它们的局部变量main()这将帮助你(和编译器)找到这样的错误。