Roy*_*lov 3 c++ corruption delete-operator
我收到一个错误 - 堆损坏,无法弄清楚原因.
我的基地:
H:
class Base
{
public :
Base(char* baseName, char* cityName);
virtual ~Base();
list<Vehicle*>::const_iterator GetEndList();
void PrintAllVehicles(ofstream &ResultFile) const;
char* GetBaseName() const;
char* GetLocation() const;
void InsertNewVehicleToBase(Vehicle* newVehicle);
list<Vehicle*>::const_iterator FindVehicle(char* id);
void RemoveVehicle (list<Vehicle*>::const_iterator beg);
private:
char* m_name;
char* m_location;
list<Vehicle*> m_baseVehicles;
};
Run Code Online (Sandbox Code Playgroud)
cpp:
Base::Base(char* baseName, char* cityName)
{
m_name = new char [strlen(baseName)+1];
strcpy(m_name, baseName);
m_location = new char [strlen(cityName)+1];
strcpy(m_location, cityName);
}
Base::~Base()
{
delete [] m_name;
delete [] m_location;
//m_baseVehicles.clear();
}
Run Code Online (Sandbox Code Playgroud)
军队破坏者:
Army::~Army()
{
list<Base*>::iterator baseIter = m_basesList.begin();
for (baseIter ; baseIter != m_basesList.end() ; ++baseIter)
delete (*baseIter);
m_basesList.clear();
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
此代码存在明显问题:
您显示的代码没有明显错误,因此错误可能在您未显示的代码中.
对我来说最直接可疑的是Base该类拥有两个指针,并且没有定义复制构造函数或赋值运算符.这意味着如果你复制一个Base对象,你最终会得到两个Base指向相同数据的对象,当它们被破坏时,它们会将它删除两次,从而导致堆损坏.
该Army班还可以有这样的问题,以及(因为它拥有几个Base三分球),但你不显示类的定义,所以它是否有一个拷贝构造函数和赋值运算符或不不是很明显.
最后,您尚未显示Base对象的分配位置.是否有可能将它们传递到Army对象中并删除Army对象外的某个位置?或者对象所Base*包含的内容可能Army是指堆栈中不应删除的对象?