【发布时间】:2015-04-11 07:16:41
【问题描述】:
我正在尝试读取一个整数文件,其中包含文件中的整数个数作为第一个整数,但是当我在读取文件后尝试关闭文件时,我遇到了段错误。
我读到如果文件指针为空并且您尝试关闭它,它将出现段错误。但是,我在关闭它之前检查它是否为空,它不是空的,它仍然给我一个段错误..
我通过 GDB 运行它,一旦 fclose(fp) 执行,它就会出现段错误。
发生了什么事??
这是我的代码:
char *mode = "r";
int numsToRead = 0;
FILE *fp = fopen(inputFile, mode);
if (fp == NULL){
fprintf(stderr, "Can't open input file!\n");
exit(1);
}
int *temp;
int index = 0;
// Get number of integers (first integer)
fscanf(fp, "%d", &numsToRead);
fprintf(stdout, "nums to read: %d\n", numsToRead);
integers = (int*)malloc(sizeof(int) * numsToRead);
for(int i = 0; i <= numsToRead; i++){
int currInt;
if(fscanf(fp, "%d", &currInt) == 1)
integers[i] = currInt;
else
break;
}
if(fp != NULL)
fclose(fp);
【问题讨论】:
-
i <= numsToRead应该是i < numsToRead。 -
您的
integers声明在哪里?如果没有声明,它将默认为int,而不是int *。 -
不要转换
malloc的结果! -
@CoolGuy 如果我无法转换 malloc 的结果,那么我该如何处理类型为 (void *) 的返回指针以使其可用于整数数组
-
阅读this