我目前正在尝试使用值初始化二维数组,但一直遇到分段错误......我注意到当我添加 fscanf 代码行时它总是发生......但我不明白它有什么问题,因为根据我的理解,它应该有效......这是一个代码片段:
FILE * fp;
int count, i,j;
int **arr;
arr = (int**)malloc(sizeof(int*)*9);
for(i = 0; i < 9; i++){
arr[i] = (int*)malloc(sizeof(int)*9);
}
fp = fopen("input.txt", "r");
for(i = 0; i < 9; i++){
for(j = 0; j < 9; j++){
fscanf(fp, "%d", &arr[i][j]);
}
}
在你的代码中,你既没有
- 检查
malloc()
是否成功 - 检查了
fopen()
的成功。
对于任何一种情况,
-
如果
malloc()
失败,它将返回 NULL,使用该指针将导致未定义的行为。 -
如果
fopen()
失败,它将返回 NULL,稍后使用文件指针将再次导致未定义的行为。
为所有库函数(通常)的成功输入一个 chcek,并且仅在它们成功时才使用返回值。