使用三重指针将内存分配给3D数组

Rog*_*ews 4 c pointers memory-management multidimensional-array

我必须使用三指针将内存分配给3D数组.

#include <stdio.h>
int main()
{
    int m=10,n=20,p=30;
    char ***z;
    z = (char***) malloc(sizeof(char**)*m*n*p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是正确的做法吗?(我认为我在做的是不正确的.)

Pau*_*l R 6

要完全分配3D动态数组,您需要执行以下操作:

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

int main()
{
    int m=10,n=20,p=30;
    char ***z;

    z = malloc(m * sizeof(char **));
    assert(z != NULL);
    for (i = 0; i < m; ++i)
    {
        z[i] = malloc(n * sizeof(char *));
        assert(z[i] != NULL);
        for (j = 0; j < n; ++j)
        {
            z[i][j] = malloc(p);
            assert(z[i][j] != NULL);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

释放数据留给读者练习.