谈的远了点。总之我需要动态申请一个二维数组,而一般方法:先申请一个指针数组再给每元素指针申请一个数组,这种方法得到的数组内存空间是不连续的,而int a[8][7]这样形式的申请的静态空间是连续的。由于上面提到的原因为了将数组赋值到mxArray结构所以需要的数组时内存连续的。google之后发现了一个方法,下改后代码如下:
void **darray_new(int row, int column, int size)原理是先申请一块连续的空间ptdhead (是最终的空间大小),但是只是这样无法通过a[1][2]的形式访问所以需要修改ptdhead[ncount](每个指针数组的元素指针的指向)使其指向正确的位置。
{
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;
}
没有评论:
发表评论