在这个问题,有人建议意见,我应该不会投的结果malloc,即
int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
而不是:
int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
我正在将一些MATLAB代码翻译成C,我正在转换的脚本大量使用具有10*100*300复杂条目的3D数组.数组的大小也取决于传感器的输入,理想情况下应该动态分配数组.到目前为止,我已经尝试了两种方法,第一种方法是平面1D阵列
value = array[x + (y*xSize) + (z*ySize*xSize)]
Run Code Online (Sandbox Code Playgroud)
哪会伤害我的大脑使用.我还尝试了一个指针数组的数组
int main () {
int ***array = malloc(3*sizeof(int**));
int i, j;
for (i = 0; i < 3; i++) {
*array[i] = malloc(3*sizeof(int*));
for (j = 0; j < 3; j++) {
array[i][j] = malloc(3*sizeof(int));
}
}
array[1][2][1] = 10;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试分配数据时,会出现seg错误.
在一个完美的世界中,我想使用第二种方法和数组符号来实现更清晰,更简单的编程.有没有更好的方法在C中动态分配三维数组?
我知道动态分配/解除分配2D数组的算法,但是对于3D数组我也不太清楚.
利用这些知识和一点对称性,我提出了以下代码.
(我在编码期间很难在3D中进行可视化).
请评论正确性并建议任何更好的替代方案(效率方面或直观方面),如果有的话.
另外,我觉得这两个2D和3D阵列可被访问像正常一样arr2D静态数组[2] [3]和
arr3D [2] [3] [2].对?
二维码
//allocate a 2D array
int** allocate2D(int rows,int cols)
{
int **arr2D;
int i;
arr2D = (int**)malloc(rows*sizeof(int*));
for(i=0;i<rows;i++)
{
arr2D[i] = (int*)malloc(cols*sizeof(int));
}
}
//deallocate a 2D array
void deallocate2D(int** arr2D,int rows)
{
int i;
for(i=0;i<rows;i++)
{
free(arr2D[i]);
}
free(arr2D);
}
Run Code Online (Sandbox Code Playgroud)
3D代码
//allocate a 3D array
int*** allocate3D(int l,int m,int n)
{
int ***arr3D;
int i,j,k;
arr3D = (int***)malloc(l * sizeof(int **));
for(i=0;i<l;i++)
{
arr3D[i] = (int**)malloc(m * sizeof(int*));
for(j=0;j<m;j++) …Run Code Online (Sandbox Code Playgroud) c memory memory-management dynamic dynamic-memory-allocation
可能的重复:
在C中使用Malloc三维数组?
2D和3D阵列的动态分配/释放
如何使用malloc分配3D数组?