C: 试图释放 2D 数组本身的程序崩溃

C: Program crashes trying to free 2D array itself

我有一个包含在结构中的二维浮点数组 n:

float **matrix;

这是动态分配的,使用:

n->matrix = (float**)malloc(n->rows * sizeof(float*));
for (i = 0; i < n->rows; i++) {
    n->matrix[i] = (float*)malloc(n->columns * sizeof(float));
}

其中 n->rowsn->columns 是预先定义的。

在取消分配时,使用了以下函数:

void de_allocate(float** matrix, int nrows) {
    int row;
    for (row = 0; row < nrows; row++) {
        free(matrix[row]);
    }
    free(matrix);
}

程序在取消分配过程中成功通过了 for 循环,但给出了 HEAP CORRUPTION DETECTED [location of error]. CRT detected that the application wrote to memory after end of heap buffer

请注意,我只是想释放 n->matrix 的内存,而不是结构本身。

这让我觉得 n->data 的长度与 free() 方法期望并试图覆盖的长度不同,但我 none 太确定了。

知道是什么导致了这个问题吗?

不知道问题发生的确切时间,可能很难追踪。你可以做的是:

  1. 运行 通过 valgrind 的应用程序 - 它不仅会告诉您问题发生的时间,还会告诉您问题发生的时间/方式。

  2. 确保应用程序在执行异常操作时崩溃 - -fsanitize=address-fsanitize=undefined 可能会有所帮助。