我刚刚了解了C ++中的动态内存分配

问题描述 投票:1回答:1

我需要防止内存泄漏,因为它会动态分配和删除其作业。我的作业代码(大)无法正常工作。因此,我编写了一些小示例代码来更好地理解,但是它们都不起作用。

include <iostream>
using namespace std;

const int MAX=5;
class son;
class dau;

class papa
{
public:
    papa(int pair);
    void show();
    int pair();
    void allocate(int howmanyeach);

private:
    son *sonpnt[MAX];
    dau *daupnt[MAX];
    int m_pair;

};

class son
{
public:
    son(int don);
    int money();

private:
    int m_money=0;


};

class dau
{
public:
    dau(int don);
    int money();

private:
    int m_money=0;

};

//////////////////////////////////////////

papa::papa(int pair)
{
    m_pair=pair;
}

int papa::pair()
{
    return m_pair;
}

void papa:: allocate(int howmanyeach)
{
    if( howmanyeach > MAX || howmanyeach<1)
        cout<<"impossible"<<endl;
    else
        for(int i=0; i<howmanyeach; i++)
        {
            sonpnt[i]=new son(7);
            daupnt[i]=new dau(5);
        }
}

void papa::show()
{
    for(int i=0;i<MAX; i++)
    {
        if(sonpnt[i]!=nullptr)
            cout<<sonpnt[i]->money();
    }
    cout<<'\n';

    for(int i=0;i<MAX; i++)
    {
        if(daupnt[i]!=nullptr)
            cout<<daupnt[i]->money();
    }


}




son::son(int don)
{
    m_money+=don;
}

int son::money()
{
    return m_money;
}


dau::dau(int don)
{
    m_money+=don;
}

int dau::money()
{
    return m_money;
}





/////////////////////////////

int main()
{
    papa p(5);
    p.allocate(1);
    p.show();

}

如果您可以指出这一点,将会很有帮助此外,有关我的主要项目的任何建议也将有所帮助。我需要三个班级来互相学习。游戏而已。玩家,怪物,领域都是职业。我不允许触摸类公共接口。挑战在于,我需要使用私有成员m_pointer和指针私有成员数组m_monster正确地进行新建和删除,该数组的大小类似于MAX这样的全局常量。我认为,除了挑战之外,我的代码似乎还可以。我刚学到的这个动态的东西真是令人讨厌。我至少要正确尝试我的小写代码。此代码应尝试什么?

谢谢

c++ debugging dynamic-memory-allocation
1个回答
0
投票

如上所述,您应该在它的析构函数中删除动态分配的papa对象。可能您没有,C ++为每个类都提供了defualt构造函数,但它确实包含了动态分配的指针。您应该添加一个析构函数:

papa::~papa()
{
    for(int i=0;i<MAX; i++)
    {
        delete sonpnt[i];
        delete daupnt[i];
    }   
}

我也将更改构造函数,以将这些指针显式初始化为null ptr:

papa::papa(int pair)
{
  for(int i=0;i<MAX; i++)
  {
    sonpnt[i] = nullptr;
    daupnt[i] = nullptr;
  }
    m_pair=pair;
}
© www.soinside.com 2019 - 2024. All rights reserved.