我无法理解 fgetc 的核心转储原因,我该如何解决?
I cannot understand core dump cause of fgetc, how can I fix it?
我这样分配矩阵:
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
它在 VS 2019 中运行良好,但在 Linux 系统中会导致分段错误(Ubuntu)。
此程序在 Linux 中运行良好,直到列为 6 或 7,但它发生 corrupted size vs. prev_size
错误或 segmentation fault
当列超过该数字时。
是分配的问题吗?或 fgetc()?
我该如何解决?
对于初学者,您的第一级分配应该使用 int
指针 的大小而不是 int
:
int **prevMatrix = malloc(sizeof(int*) * arraySize[0]);
如果这些类型的大小不同,您的原始代码可能有问题。
顺便说一句,你不应该在 C 中转换 malloc
return 值,它会导致微妙的问题。
我这样分配矩阵:
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
它在 VS 2019 中运行良好,但在 Linux 系统中会导致分段错误(Ubuntu)。
此程序在 Linux 中运行良好,直到列为 6 或 7,但它发生 corrupted size vs. prev_size
错误或 segmentation fault
当列超过该数字时。
是分配的问题吗?或 fgetc()? 我该如何解决?
对于初学者,您的第一级分配应该使用 int
指针 的大小而不是 int
:
int **prevMatrix = malloc(sizeof(int*) * arraySize[0]);
如果这些类型的大小不同,您的原始代码可能有问题。
顺便说一句,你不应该在 C 中转换 malloc
return 值,它会导致微妙的问题。