用malloc 和 free来生成三维动态数组

malloc memory中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

使用思路和new相同,都是先申请内存,然后使用,使用结束后释放内存。

// 用malloc 和 free来生成三维动态数组
    int X_Length = 5, Y_Length = 10, Z_Length = 7;//长度定义

    double ***DD;//声明指针
    DD = (double***)malloc(sizeof(double**)*X_Length);//X的长度
    for (int x = 0; x < X_Length; x++)
    {
        DD[x] = (double **)malloc(sizeof(double*)*Y_Length);//Y的长度
        for (int y = 0;y < Y_Length;y++)
        {
            DD[x][y] = (double *)malloc(sizeof(double)*Z_Length);//Z的长度
        }
    }

    //数组的声明完成,可以对数组进行操作
    //比如将数组的角标的和,并显示在表格中
    int count_number = 0;

    for (int i = 0;i < X_Length; i++)
    {
        for (int j = 0; j < Y_Length; j++)
        {
            for (int k = 0; k < Z_Length; k++)
            {
                DD[i][j][k] =  i + j + k;
                CString temp;
                m_list.InsertItem(count_number,_T(""));


                temp.Format(_T("%d"),count_number+1);m_list.SetItemText(count_number,0,temp);
                temp.Format(_T("%d"),i);m_list.SetItemText(count_number,1,temp);
                temp.Format(_T("%d"),j);m_list.SetItemText(count_number,2,temp);
                temp.Format(_T("%d"),k);m_list.SetItemText(count_number,3,temp);
                temp.Format(_T("%f"),DD[i][j][k]);m_list.SetItemText(count_number,4,temp);
                count_number++;
            }
        }
    }


    //用完数组后,用free将内存释放
    for (int x = 0; x < X_Length; x++)
    {
        for (int y = 0; y < Y_Length; y++)
        {
            free(DD[x][y]);//释放Z
        }
    }
    for (int x = 0; x < X_Length; x++)
    {
        free(DD[x]);//释放Y
    }
    free(DD);//释放X

猜你喜欢

转载自www.cnblogs.com/gaozihan/p/10760055.html