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