我这样分配矩阵:
prevMatrix = (int**)malloc(sizeof(int) * arraySize[0]);
for (int i = 0; i < arraySize[0]; i++) {
prevMatrix[i] = (int*)malloc(sizeof(int) * arraySize[1]);
}
我检查了arraySize[]
是否具有正常值。arraySize[0]
表示行,arraySize[1]
表示列。
然后我把矩阵像这样交出来:
void getInputMatrix(FILE* input, int column, int** matrix)
getInputMatrix(input, arraySize[1], prevMatrix);
然后函数的主体是:
void getInputMatrix(FILE* input, int column, int** matrix) {
int i = 0, j = 0, c = 0;
while (!feof(input)) {
if (j == column) {
j = 0;
i++;
}
c = fgetc(input);
if (c != EOF && c != 32 && c != 10 && c != 13) {
matrix[i][j] = c - 48;
j++;
}
}
}
这是矩阵文件的例子:
1 0 0 0 0 0 0
0 1 0 1 0 0 0
0 1 0 0 1 1 0
0 1 1 1 0 0 0
0 0 0 0 1 0 0
0 1 0 0 0 1 0
1 0 1 1 0 0 0
0 1 0 0 0 0 1
它在VS2019中运行得很好,但它会导致Linux系统(Ubuntu(中的分段错误。
该程序在Linux中运行良好,直到列为6或7,但当列超过该数字时,会出现corrupted size vs. prev_size
错误或segmentation fault
错误。
这是分配问题吗?或fgetc((?我该怎么修?
对于初学者来说,第一级分配应该使用int
指针的大小,而不是int
:
int **prevMatrix = malloc(sizeof(int*) * arraySize[0]);
如果这些类型的大小不同,那么原始代码可能会出现问题。
而且,顺便说一句,您不应该在C中强制转换malloc
返回值,这可能会导致一些微妙的问题。