• c语言,动态数组


    试着直接malloc一个2*3*4的空间来模拟数组:

    #include <stdio.h>
    #include <malloc.h>
    
    int main(void)
    {
    
        int*** pArr = NULL;
    
        pArr = (int ***)malloc(2*3*4*sizeof(int));
        if(pArr == 0)
        {
            return -1;
        }
        
        memset(pArr, 0, 2*3*4*sizeof(int));
    
        pArr[0][0][1] = 11;
        printf("pArr[0][0][1] = %d
    " , pArr[0][0][1]);
        
        free(pArr);
        pArr = NULL;
    
        return 0;
    }
    /*
    root@oucaijun:/work/dcc# gcc 1.c ;./a.out 
    1.c: In function ‘main’:
    1.c:17: warning: incompatible implicit declaration of built-in function ‘memset’
    Segmentation fault
    
    */
    

      

    创建与释放一个三维数组:

    #include <stdio.h>
    #include <malloc.h>
    
    int*** Malloc3DActiveArray(int*** pArr, int x, int y, int z);
    void Free3DActiveArray(int*** pArr, int x, int y);
    //void Display3DArray(int*** pArr, int x, int y, int z);
    
    
    int main(void)
    {
        int x, y, z;
        int*** array = NULL;
    
        printf("输入一维长度: ");
        scanf("%d",&x);
        printf("输入二维长度: ");
        scanf("%d",&y);
        printf("输入三维长度: ");
        scanf("%d",&z);
    
        array = Malloc3DActiveArray(array, x, y, z);
        printf("1
    ");
        printf("array[0][0][1] = %d
    ", array[0][0][1]);
        Free3DActiveArray(array, x, y);
        array = NULL;
    
        return 0;
    }
    
    int*** Malloc3DActiveArray(int *** pArr, int x, int y, int z)
    {
        int i, j, k;
        pArr = (int ***)malloc(x * sizeof(int **)); //第一维
    
        for (i = 0; i < x; i++)
        {
            pArr[i] = (int **)malloc(y * sizeof(int *));//第二维
            for (j = 0; j < y; j++)
            {
                pArr[i][j] = (int *)malloc(z * sizeof(int));//第三维
                for (k = 0; k < z; k++)
                {
                    pArr[i][j][k] = i + j + k + 1;
                    printf("%d ", pArr[i][j][k]);
                }
                printf("
    ");
            }
            printf("
    ");
        }
        
        return pArr;
    }
    
    void Free3DActiveArray(int*** pArr, int x, int y)
    {
        int i, j;
        for (i = 0; i < x; i++)
        {
            for (j = 0; j < y; j++)
            {
                free(pArr[i][j]);//第三维
                pArr[i][j] = 0;
            }
    
            free(pArr[i]);//第二维
            pArr[i] = 0;
        }
        free(pArr);//第一维
    }
    /*
    root@oucaijun:/work/dcc# gcc 1.c ;./a.out 
    输入一维长度: 1
    输入二维长度: 2
    输入三维长度: 3
    1 2 3 
    2 3 4 
    
    1
    array[0][0][1] = 2
    
    */
    

      

     c语言中内存的动态分配与释放(多维动态数组构建) 

  • 相关阅读:
    GDI+中发生一般性错误
    反复
    一些网址
    控制listview大图标之间的间距
    android 系统移植
    android 启动报错
    android init.rc 语法分析
    Linux下的管道编程技术dup函数和dup2函数
    为了防止打开的设备 被占用
    android 多媒体框架
  • 原文地址:https://www.cnblogs.com/mylinux/p/4674079.html
Copyright © 2020-2023  润新知