有没有理由说早期编译的程序应该因为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存在错误。
答案 0 :(得分:0)
好吧,它用来“工作”的原因是你正在破坏一个不重要的内存位置。改变你的代码改变了现状,现在你正在破坏重要的东西。
您正在将未初始化的指针传递给createarray()。你想做类似的事情:
int* aryHold;
//...
... createarray(&aryHold ...
顺便说一下,很多编译器都能够为你捕获这种错误。如果你还没有,你可能想看看你的编译器是否有一个错误检查选项,可以帮助你解决这个问题(并且可能找到一些只是偶然“工作”的其他代码)。