二维数组
直接定义的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);