誰もが: 私は2Dの行列をCで割り振るアプローチを見つけました。それを練習しながら、未知のバグについては混乱します。私は、このバージョンで問題ありません動的に割り当てられた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
。しかし、私は問題を理解することができませんでした。 誰か助けてくれますか?あなたは算術外のキャストを持っているので、&よろしく
スペースを空けたところでコード行をどのように記述しますか? –
'配列'は 'int **'です。 'array_head'は' int * 'です。どちらも違います。 – BLUEPIXY
本当にintのポインタへのポインタを返そうとしていますか?のように、intポインタの配列を探していますか? – jwdonahue