Fgets错误seg fault

时间:2013-02-12 04:01:53

标签: c fgets

有没有理由说早期编译的程序应该因为fgets而在某一时刻出错?我没有更改任何与之相关的代码。突然我相信它没有打开文件,但是我用十五分钟前的文件对它进行了测试....我所做的就是添加一个搜索功能,所以我不明白这个问题是什么.....

它可能是我通过PuTTy连接的服务器吗?

int createarray( int **arrayRef, FILE *fptr){
    int size = 0, i;
    char rawdata[100];

    while (fgets(rawdata, 99, fptr) != NULL){
        size++;
    }

    rewind(fptr);
    *arrayRef = malloc(sizeof(int) * size);

    for ( i = 0; i < size; i++ ){
     fgets(rawdata, 99, fptr);
     *(*arrayRef + i) = atoi(rawdata);
    }


    return size;
}


      int main ( int argc, char **argv ) {  //main call

    // declare variable to hold file
    FILE *inFilePtr = fopen(*(argv + 1), "r");
    int **aryHold;
    int numElements, sortchoice, key, foundindex;

    // Call function to create array and return num elements
    numElements = createarray(aryHold, inFilePtr);

这是编译,执行正确且之后未更改的代码。 GDB表示fgets存在错误。

1 个答案:

答案 0 :(得分:0)

好吧,它用来“工作”的原因是你正在破坏一个不重要的内存位置。改变你的代码改变了现状,现在你正在破坏重要的东西。

您正在将未初始化的指针传递给createarray()。你想做类似的事情:

int* aryHold;
//...
... createarray(&aryHold ... 
顺便说一下,很多编译器都能够为你捕获这种错误。如果你还没有,你可能想看看你的编译器是否有一个错误检查选项,可以帮助你解决这个问题(并且可能找到一些只是偶然“工作”的其他代码)。