Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays C语言,动态三维数组_Arrays_C_Malloc - Fatal编程技术网

Arrays C语言,动态三维数组

Arrays C语言,动态三维数组,arrays,c,malloc,Arrays,C,Malloc,我必须用C语言创建一个动态的三维整数数组 但是我必须单独创建指针并使用malloc。我知道如何使用malloc创建二维数组,但我对使用以下方法感到困惑,我真的找不到其他类似的问题 2x2x2整数数组 第一步: int *firstD; firstD = (int) malloc(2*sizeof(int)); 第二步: int *secondD; secondD = (int) malloc(2 * firstD * sizeof(int)); 第三步: int *thirdD;

我必须用C语言创建一个动态的三维整数数组

但是我必须单独创建指针并使用
malloc
。我知道如何使用
malloc
创建二维数组,但我对使用以下方法感到困惑,我真的找不到其他类似的问题

2x2x2整数数组

第一步:

int *firstD;  
firstD = (int) malloc(2*sizeof(int));
第二步:

int *secondD;  
secondD = (int) malloc(2 * firstD * sizeof(int));
第三步:

int *thirdD;  
thirdD = (int) malloc(2 * secondD * sizeof(int));
我想也许我必须在起始点(int*)添加指针,然后每一步增加一个指针

  • 分配一个数组来存储指向行指针数组的指针
  • 分配数组以存储行指针
  • 分配数组以存储每行
  • #包括
    内部主(空){
    int size1=2,size2=2,size3=2;
    int***阵列;
    数组=malloc(sizeof(int**)*size1);//1
    对于(int i=0;i
    在上面的示例中,我明确地编写了类型名称,但我建议使用取消引用来获取要分配的元素的大小,这样可以更好地防止导致键入错误

    #include <stdlib.h>
    
    int main(void) {
        int size1 = 2, size2 = 2, size3 = 2;
        int*** array;
    
        // allocate arrays
        array = malloc(sizeof(*array) * size1); // 1
        for (int i = 0; i < size1; i++) {
            array[i] = malloc(sizeof(*array[i]) * size2); // 2
            for (int j = 0; j < size2; j++) {
                array[i][j] = malloc(sizeof(*array[i][j]) * size3); // 3
            }
        }
    
        // free arrays
        for (int i = 0; i < size1; i++) {
            for (int j = 0; j < size2; j++) {
                free(array[i][j]);
            }
            free(array[i]);
        }
        free(array);
    
        return 0;
    }
    
    #包括
    内部主(空){
    int size1=2,size2=2,size3=2;
    int***阵列;
    //分配数组
    array=malloc(sizeof(*array)*size1);//1
    对于(int i=0;i

    在上面的示例中,我们已经给出了一些简单的方法,但是您应该检查
    malloc()
    的结果,看看分配是否成功。

    malloc
    的结果强制转换到
    int
    是一个坏主意,因为它可能会破坏指针。将
    malloc
    的结果强制转换为指针也是无效的。如果第二维度和第三维度是固定的,您可以使用指向2D数组的指针作为您的类型进行单个分配和释放。此外,虽然多维对象在C语言中非常好,但有时确实需要它们——但是,通常这也意味着您需要重新考虑数据处理需求。感谢您的回复,但我必须使用三个步骤(每一步创建一个指针)。这是我的教授为考试学习而制作的练习表,我被迫使用这种方法,因为分数的给出方式。我不能使用单线或其他功能。我还必须使用变量_name=(数据类型)malloc(..)格式。
    #include <stdlib.h>
    
    int main(void) {
        int size1 = 2, size2 = 2, size3 = 2;
        int*** array;
    
        // allocate arrays
        array = malloc(sizeof(*array) * size1); // 1
        for (int i = 0; i < size1; i++) {
            array[i] = malloc(sizeof(*array[i]) * size2); // 2
            for (int j = 0; j < size2; j++) {
                array[i][j] = malloc(sizeof(*array[i][j]) * size3); // 3
            }
        }
    
        // free arrays
        for (int i = 0; i < size1; i++) {
            for (int j = 0; j < size2; j++) {
                free(array[i][j]);
            }
            free(array[i]);
        }
        free(array);
    
        return 0;
    }