我有一个包含在结构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->rows
和n->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()
方法的期望和试图写的不同,但我不太确定。
任何想法可能导致问题?
答案 0 :(得分:0)
如果不知道问题何时发生,可能很难追查。你能做的是:
通过valgrind
运行应用程序 - 它不仅会告诉您问题,还会告诉您何时/如何。
确保应用在出现奇怪行为时崩溃 - -fsanitize=address
或-fsanitize=undefined
可能会有所帮助。