2
everyone: 我剛剛遇到了一種在C中分配二維矩陣的方法。在練習時,我對一個未知的bug感到困惑。動態分配2D空間的內存管理
這裏是函數,第一個版本:
//first version
static int ** my2DAlloc(int rows, int cols){
int ** array;
int * array_head;
int i;
int len = sizeof(int*)*rows + sizeof(int)*rows*cols + 1;
array = (int**)malloc(len);
memset(array, 0, len);
array_head = (int *) (array + rows);
for(i=0; i<rows; i++)
array[i] = array_head + i*cols ;
return array;
}
我沒有這個版本的任何問題。不過,我試圖改變代碼一點,如下所示:
//second version
static int ** my2DAlloc(int rows, int cols){
int ** array;
int * array_head;
int i;
int len = sizeof(int*)*rows + sizeof(int)*rows*cols + 1;
array = (int**)malloc(len);
memset(array, 0, len);
//array_head = (int *) (array + rows);
for(i=0; i<rows; i++)
array[i] = (int *) (array + rows + i*cols); // <--- the major difference
return array;
}
對此第二個版本,它似乎罰款將數據寫入到矩陣和讀取數據了。 但是,當我嘗試釋放分配的空間,我得到系統錯誤,如:
free(): invalid next size (fast): 0x00000000020df010
這似乎是一些內存錯誤。但我無法弄清楚這個問題。 任何人都可以幫我嗎?
感謝&問候
你如何寫你釋放空間的代碼行? –
'array'是'int **'。 'array_head'是'int *'。兩者都不同。 – BLUEPIXY
你真的打算返回一個指向int指針的指針嗎?在中,你在尋找一個int指針數組嗎? – jwdonahue