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

时间:2016-01-31 23:02:59

标签: c arrays pointers malloc free

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

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()方法的期望和试图写的不同,但我不太确定。

任何想法可能导致问题?

1 个答案:

答案 0 :(得分:0)

如果不知道问题何时发生,可能很难追查。你能做的是:

  1. 通过valgrind运行应用程序 - 它不仅会告诉您问题,还会告诉您何时/如何。

  2. 确保应用在出现奇怪行为时崩溃 - -fsanitize=address-fsanitize=undefined可能会有所帮助。