0

是否有任何理由让较早编译的程序由于 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 有错误。

4

1 回答 1

0

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

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

int* aryHold;
//...
... createarray(&aryHold ... 

顺便说一句,许多编译器都有能力为你捕捉到这种错误。如果你还没有,你可能想看看你的编译器是否有一个错误检查选项,可以省去你的麻烦(并且可能会找到一些其他代码,只是偶然地“工作”)。

于 2013-02-12T04:57:38.057 回答