我正在为一个类做GDB项目,我发现一段代码中的segfault部分有问题,这段代码读取一个文件,并使用输入创建一个矩阵。GDB将我带到"printf(" %.2d\t ",mat [row][col]);",但我似乎无法掌握到底出了什么问题。
int main(int argc, char* argv[])
{
FILE* fp = fopen(argv[1], "r");
int size = 0;
int **mat = readFile(fp, &size);
printMatrix(mat, size);
return 0;
}
int** readFile(FILE* fp, int *size)
{
fscanf(fp, "%d", size);
int num = *size;
int index = 0;
int** mat = (int**)malloc(num * sizeof(int));
for(index = 0; index < num; index++)
mat[index] = (int*)malloc(num * sizeof(int));
int row = 0;
int col = 0;
for(; row < num; row++)
{
for(; col < num; col++)
{
fscanf(fp, "%d", &mat[row][col]);
}
}
return mat;
}
void printMatrix (int** mat, int num)
{
int row = 0;
int col = 0;
for(row = 0; row < num; row++)
{
for(col = 0; col < num; col++)
{
printf("%.2d\t", mat[row][col]); /* gdb indicates segfault here */
}
printf("\n");
}
}
我尝试修改for循环,但似乎无法获得预期的输出。
1条答案
按热度按时间63lcw9qa1#
应该是
或更好
对于非
int
的大小,也使用site_t
。我个人会使用指向数组的指针而不是指针数组来消除一级间接性(难以(取消)/分配,性能损失)
始终检查
malloc
和scanf
的结果