AI吃大瓜 2018-05-10 02:41 采纳率: 75%
浏览 1211
已结题

C++三维数组空间释放问题

 // MaxMinDisTest.cpp :   
#include "stdafx.h"  
#include <iostream>  

using namespace std;

inline int *** newArray3(int row, int col,int cha){
    int *** p3;
    p3 = new int**[cha];
    for (int i = 0; i < cha; i++) {
        p3[i] = new int*[row];
        for (int j = 0; j < row; j++)
            p3[i][j] = new int[col];
    }
    return p3;
}

inline void initArray3(int ***p3, int row, int col,int cha,int value=0) {
    for (int i = 0; i < cha; i++)
        for (int j = 0; j < row; j++)
            for (int k = 0; k < col; k++)
                p3[i][j][k] = i;
}


inline void printArray3(int ***p3, int row, int col, int cha) {
    cout << "[";
    for (int i = 0; i < cha; i++)
    {
        cout << "[";
        for (int j = 0; j < row; j++)
        {
            for (int k = 0; k < col; k++)
                cout << p3[i][j][k] << ' ';
            cout << endl;
        }
        cout << "]"<<endl;
    }
    cout << "]" << endl;
}

inline void deleteArray3(int ***p3, int row, int col, int cha) {
    for (int i = 0; i < cha; i++) {
        for (int j = 0; j < row; j++) {
            delete[]p3[i][j];
        }
        delete[]p3[i];
    }
    delete[]p3;
}

int main(void)
{
    int row = 5, col = 4, cha = 3;
        /*********************** 动态定义三维数组  ******************************/
    int *** p3 = newArray3(row, col, cha);//
    initArray3(p3,row,col,cha);//赋值
    printArray3(p3, row, col, cha);//打印输出结果
    deleteArray3(p3, row, col, cha);//想利用一个函数释放new空间,这里没有释放成功,因为调试发现里外指针p3指向不同
    return 0;
}

我的问题是:上面的程序deleteArray3函数用于释放三维数组空间,显然这是没有成功释放的,请问该如何使用一个函数释放new空间?
难道只能采用宏定义的方式麽:

 #define  deleteArray3(p3, row, col, cha) \
    for (int i = 0; i < cha; i++) { \
        for (int j = 0; j < row; j++) { \
            delete[]p3[i][j]; \
        } \
        delete[]p3[i]; \
    } \
    delete[]p3; \
  • 写回答

4条回答

  • Kiloveyousmile 2018-05-10 02:54
    关注

    您这传值有问题啊,您把指针作为一个值传递给了函数,实际上使用的是复制传值,而不是传地址,自然无法释放了。
    三维数组通过函数释放,应该传递一个该数组指针的指针进去,也就是传递指针的地址。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题