带malloc和calloc的三维数组?

带malloc和calloc的三维数组?,c,C,我正试图用三维动态记忆进行安排,我的代码如下: typedef unsigned char matrix; matrix ***mat(int n, int b) { matrix ***temp = (matrix ***)malloc(n*sizeof(matrix**)); for(int i=0; i<n; i++) { temp[i] = (matrix **)malloc(b*sizeof(matrix *)); for

我正试图用三维动态记忆进行安排,我的代码如下:

typedef unsigned char matrix;

matrix ***mat(int n, int b)
{
    matrix ***temp = (matrix ***)malloc(n*sizeof(matrix**));
    for(int i=0; i<n; i++)
    {
        temp[i] = (matrix **)malloc(b*sizeof(matrix *));
        for(int j = 0; j < b; j++)
            temp[i][j]= (matrix *)malloc(b*sizeof(matrix));
    }
    return temp;
}
int main()
{ 
    matrix ***M2 = mat(3,2);
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<2; j++)
        {
            for(int k=0; k<2; k++)
            {
                printf(" %d", M2[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}
typedef无符号字符矩阵;
矩阵***矩阵(整数n,整数b)
{
矩阵***温度=(矩阵***)malloc(n*sizeof(矩阵**));

对于(int i=0;i我猜在嵌套最多的for循环(the
j
one)中,变量在声明
for(int j=0;i
中被弄乱。尝试
j
对于所有的您必须在mat函数中更正嵌套for循环内的j计数器,这是正确的:

for(int j=0;j

通常我会用FORTRAN做这类事情,就我个人而言,我喜欢用FORTRAN编写包含高维数组的算法作为库,并用C编写流程控制人员。虽然3D在C中仍然很容易管理,但你需要非常小心使用指针,这是一个工作示例,它是valgrind clean

#include <stdio.h>
#include <stdlib.h>

float ***myarray(int l, int m, int n)
{
    float **ptr = malloc(sizeof(float*)*(l+l*m));
    float *data = malloc(sizeof(float)*l*m*n);
    float **p1 = ptr, **p2 = ptr+l;
    for(int i=0; i<l; i++) {
        p1[i] = (float*)(p2+i*m);
        for(int j=0; j<m; j++)
            p2[i*m+j] = data+(i*m+j)*n;
    }
    return (float***)ptr;
}

void myfree(float ***a)
{
    free(a[0][0]);
    free(a);
}

int main()
{
    float ***array = myarray(4,3,2);
    for(int i=0; i<4; i++)
        for(int j=0; j<3; j++)
            for(int k=0; k<2; k++)
                array[i][j][k] = i+j+k;
    myfree(array);
    return  0;
}
#包括
#包括
浮点***myarray(整数l、整数m、整数n)
{
浮点数**ptr=malloc(sizeof(float*)*(l+l*m));
浮点数*数据=malloc(sizeof(float)*l*m*n);
浮动**p1=ptr,**p2=ptr+l;

对于(int i=0;In你在编程哪种语言?你能提出一个……也没有……没有冒犯哇哦,A。如果这是C++,那么创建一个类的方法会更容易,分配一个内存块并计算它自己的索引。这个实现将是一个噩梦,读和调试。@ Yksisarvinen Jinx!那不是三维数组。这是一个指向一维数组的指针数组。有关您创建的内容的详细解释,请参阅。我的错,字母“l”看起来太像第一个“1”。非常感谢,我将进行这些更改,希望问题不会持续。非常感谢,我还没有意识到我是如何声明循环的,但我做了改变,问题仍然存在。