我无法理解 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 值,它会导致微妙的问题。