0

我做了这个程序,我声明

long double *M;

然后我从文件中读取数据

   i=1;
   M = (long double *) calloc ( i , sizeof(long double) );
   while ( !feof( arq_matriz ) ){ 
       fscanf ( arq_matriz , "%Lf" , (M+i-1));
       i++;
       M = (long double *) realloc ( M , i * sizeof(long double) );
   }
   fclose(arq_matriz);

所以,为了测试我把它打印在屏幕上

for (i=0;i<=44;i++){
    printf("\n %Lf",*(M+i));
}

一切都很完美。但是当我将它传递给一个函数时,甚至当我调试它时,我得到了 *M=0 而事实 *M = 0.25 和 *(M+1) = 'invalid float number'。我不知道为什么会发生这种情况,因为所有内容都直接打印在屏幕上。有什么提示吗?谢谢!

4

1 回答 1

1

尽管您试图realloc在循环中,但您没有正确执行 - 当/如果realloc失败时,它会返回一个空指针。由于您将其直接分配回M,因此您已经丢失了原始指针(泄漏内存),并且由于您不检查它是否为空指针,因此您继续写入它,如果它失败则导致未定义的行为.

虽然它可能与手头的问题无关,但while (!feof(somefile))几乎可以保证像这样的循环行为不端(通常似乎从文件中读取了最后一个项目两次)。

于 2012-05-30T06:28:49.553 回答