内存的动态分配(指针数组)

Posted

技术标签:

【中文标题】内存的动态分配(指针数组)【英文标题】:Dynamic allocation of memory (Array of pointers) 【发布时间】:2017-04-24 21:37:42 【问题描述】:

此运算符重载是否存在内存泄漏?

我的想法在代码下面..(MotorVehicle 是一个没有分配的类)

class myClass    
private:
    MotorVehicle **vehicle;
    int vehNo;
public:

myClass() : vehicle(), vehNo(0)  // vehicle() -> NULL

    ~myClass()
    
        for(int i = 0; i < vehNo; i++)
            delete vehicle[i];
    
    .
    .
    .
    myClass &operator+=(MotorVehicle *veh)
    
        MotorVehicle **temp = new MotorVehicle*[vehNo + 1];
        for(int i = 0; i < vehNo; i++)
            temp[i] = vehicle[i];
        temp[vehNo] = veh;
        //for(int i = 0; i < vehNo; i++)
          //  delete vehicle[i];
        vehNo++;
        vehicle = new MotorVehicle*[vehNo];
        for(int i = 0; i < vehNo; i++)
            vehicle[i] = temp[i];

        return *this;
    
;

我有一组 MotorVehicle (**tmp) 类型的指针,我为其分配了内存,并将它们中的每一个设置为指向车辆指向的内容 + 最后一个指向车辆指向的内容。由于我将它们设置为指向什么车辆指向,因此我不会在某处丢失数据,并且可以在将来取消分配它们。然后我再次为车辆分配内存以返回它们指向 +1 对象。但是我分配了两次内存并且都包含相同事物的位置,所以如果我删除其中一个,那么另一个将没有任何东西(会挂在某个地方)..但最后内存将被删除与析构函数? 我想对了吗?如何绕过为同一件事分配内存 2 次?

P.s 是的手动:#(任何可能以任何方式帮助我的材料将不胜感激)

【问题讨论】:

为什么不直接使用std::vector @PaulMcKenzie 这是因为讲课.. :/ 如果你想手动操作,我建议创建一个真正的动态数组类而不是MotorVehicle 类。如果没有,您将一遍又一遍地为这个类、那个类、另一个类编写相同的代码——只需创建一个向量类,并在您未来的所有作业中使用它。然后你的MotorVehichle 类看起来就像你实际使用了std::vector 一样简单。 您有内存泄漏。 temp 永远不会被释放。但是如果你使用std::vector 会更容易 【参考方案1】:

是的,你在泄露temp

更好的尝试:

myClass &operator+=(MotorVehicle *veh)

    MotorVehicle **temp = new MotorVehicle*[vehNo + 1];
    for(int i = 0; i < vehNo; i++)
        temp[i] = vehicle[i];
    temp[vehNo] = veh;
    vehNo++;
    delete[] vehicle;
    vehicle = temp;

    return *this;

更好的解决方案:使用std::vector

【讨论】:

我认为这仅适用于 MotorVehicle 类型的对象数组。删除 [] 车辆;由于车辆指向指针,因此不会删除任何内容? 它删除指针数组的存储。您不想删除 MotorVehicles 本身,因为您只是复制了他们的指针。 所以vehicle = temp; 可以让车辆指向 temp 指向的任何指针? 哦,你想说的只是释放分配的空间,而不是它指向的东西,所以通过将地址传递给车辆->它将负责..谢谢!!

以上是关于内存的动态分配(指针数组)的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用动态内存分配创建节点指针数组

C和C指针小记(十六)-动态内存分配

为啥在 C 中为数组声明和指向数组声明的指针动态分配的内存不同? [复制]

指向动态二维字符数组的三重指针的内存分配

4-数组指针与字符串1.4-动态内存分配

如何为多维数组动态分配内存