2009年5月18日星期一

C语言动态分配二维数组内存

前几天学习Matlab与C++的混合编程,不了最难得是matlab所有的数据的结构都是mxArray结构,而此结构不是与C类似的按行来取二维数组,而是Fortune类似的以列来取二维数组。

谈的远了点。总之我需要动态申请一个二维数组,而一般方法:先申请一个指针数组再给每元素指针申请一个数组,这种方法得到的数组内存空间是不连续的,而int a[8][7]这样形式的申请的静态空间是连续的。由于上面提到的原因为了将数组赋值到mxArray结构所以需要的数组时内存连续的。google之后发现了一个方法,下改后代码如下:
void **darray_new(int row, int column, int size)
{
void **ptdhead = NULL; //////////在后面说明为什么要用void**类型
void **ptdBody = NULL;//////////在后面说明为什么要用void**类型
//
ptdhead = (void **)malloc(sizeof(void*)*row + sizeof(double)*row*column);
//sizeof(void*)*row是指针大小,sizeof(double)*row*column是所存元素大小

if(!ptdhead)
return NULL;

ptdBody = ptdhead + row ;

for(int ncount = 0; ncount < row; ncount++)
ptdhead[ncount] = ptdBody + ncount * column* sizeof(double)/sizeof(void*);

return ptdhead;
}
原理是先申请一块连续的空间ptdhead (是最终的空间大小),但是只是这样无法通过a[1][2]的形式访问所以需要修改ptdhead[ncount](每个指针数组的元素指针的指向)使其指向正确的位置。

没有评论: