我已經包含在結構n
內的二維int數組:使用C:程序崩潰設法釋放二維數組本身
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()
方法期望並嘗試寫入的長度不同,但我不太確定。
任何想法可能導致問題?
這不是一個二維數組,而只是一個仿真而已。這樣的代碼屬於博物館。現在,你應該有一個兼容C99的編譯器,它能夠一次性分配2D,'float(* matrix)[nrows] = malloc(sizeof(float [ncols] [nrows]));'不需要'爲'循環和亂搞與幾個'免費'調用。 –
@JensGustedt我在查找某個解決方案時看到過幾個問題完全相同的評論,但不幸的是,我不能使用C99編譯器,因爲它可能是痛苦的。 – user3893820
問題中的代碼對我來說看起來沒問題。你有沒有嘗試使用valgrind進行更精確的調試? – immibis