二维数组

直接定义的double tec[162][3000]是会报错的,好像是因为在栈中不允许开辟这么大的内存,换成tec[162][300]就不会报错了。

而利用指针定义的二维数组,却不会报错。

double **tec;

开辟:
tec = (double**)malloc(MAXSAT*sizeof(double*));
for (i = 0; i < MAXSAT; i++)
{
tec[i] = (double *)malloc(3000*sizeof(double));

}

释放:

for(int i=0;i<MAXSAT;i++)

    free((void *)tec[i]);

free((void *)tec);

为第二维长度固定的二维数组分配内存

该二维数组的第一维长度不定,而 第二维是固定(类似arr[n][3]的数组)。我们可以想到的是用双指针代替数组,当然可以;也可以直接对n赋值后,直接定义arr[n][3] (C99标准支持),但这里要说的是另一种方法。

这里以将点云数据读入二维数组为例,由于点云点数n不定,可以确定的是,点是三维点,可以用以下方式定义并分配内存:

double (*arr)[3] = (double ((*)[3]))malloc (n*3*sizeof(double));

而针对我的程序:

double(*tec)[MAXSAT] = (double(*)[MAXSAT])malloc(3000*sizeof(double));
tec[2][2551] = 1;

注意: MAXSAT为行,3000为列,即在声明是要注意  列相当于括号里面的东西,要用malloc进行分配个数 。

 

释放:

free((void*)tec);

posted @ 2016-10-18 14:40  OnEDaYa  阅读(171)  评论(0编辑  收藏  举报