我有一个用c ++编写的相当复杂的应用程序。我有一个叫的班级OrderBook
。我需要动态创建一个OrderBook对象数组,所以我要做的是,
OrderBook* pOrderBooks; // In header file
在运行时,我将数组创建为
p_OrderBooks = new OrderBook[n]; // n is an integer initialized at run time
该程序运行正常。但是,当我尝试删除数组时(因为我需要创建一个由指向的新数组pOrderBooks
),程序崩溃了。这就是我删除它的方式。
delete[] p_OrderBooks;
我已经确保崩溃是由于该行而发生的。所以我目前正在做的是重新初始化指针,而不删除先前分配的内存。
//delete[] p_OrderBooks; // <- crash happens here
p_OrderBooks = new OrderBook[k]; // for some 'k'
但这很糟糕,因为会发生内存泄漏。我想知道在重新指向新数组之前如何正确释放内存。
我发现了问题。我正在将指向基类中创建的对象的指针传递给OrderBook
对象。
Server* p_Server = new Server(); // Some class
...
pOrderbook[i]->SetServer(p_Server) // <- for i=[0:99]
通过(pass p_Server
)存储在OrderBook
对象中p_ServerBase
(例如)。
Server* p_ServerBase; // <- in OrderBook.h
...
OrderBook::SetServer(Server* pServer)
{
p_ServerBase = pServer;
}
然后在OrderBook
的distructor中,我试图将其删除,p_ServerBase
仍在基类中使用。
...
~OrderBook()
{
delete p_ServerBase;
}
以前没有这种经验。我不会再这样做了:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句