相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果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)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

Malloc是C中的三维数组?

我正在将一些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中动态分配三维数组?

c arrays multidimensional-array

28
推荐指数
5
解决办法
4万
查看次数

2D和3D阵列的动态分配/释放

我知道动态分配/解除分配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

11
推荐指数
1
解决办法
4万
查看次数