C++应用程序在删除时崩溃
C++ application crashes at delete
我有一个用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'
但这很糟糕,因为会有内存泄漏。我想知道如何在重新指向新数组之前正确释放内存。
您正在分配p_OrderBooks
,但正在删除pOrderBooks
如果这只是你文章中的一个简单的拼写错误,那么很可能你超出了这个数组的界限,写入的元素超过了开头或结尾,因此损坏了堆,所以当你试图删除它时它会崩溃
OrderBook的一个或多个析构函数是否可能从析构函数中抛出异常?如果是这样(通常被认为是坏的(,如果不处理,将导致应用程序崩溃。
我发现了这个问题。我将一个指向基类中创建的对象的指针传递给OrderBook
对象。
Server* p_Server = new Server(); // Some class
...
pOrderbook[i]->SetServer(p_Server) // <- for i=[0:99]
通过的CCD_ 6被存储在CCD_ 7对象中作为CCD_。
Server* p_ServerBase; // <- in OrderBook.h
...
OrderBook::SetServer(Server* pServer)
{
p_ServerBase = pServer;
}
然后在OrderBook
的发行器中,我试图删除它,p_ServerBase
,它仍在基类中使用。
...
~OrderBook()
{
delete p_ServerBase;
}
以前从未有过这样的经历。我不会再这样做了:(
如果你正在做这样的事情:
订单簿*p_OrderBooks;
int n;
p_OrderBooks=新的OrderBook[n];//这里n包含垃圾
cin>gt;n
删除[]p_OrderBooks;
这里n可以是任何垃圾值,我们不知道它的大小,也许我们开始访问我们不拥有的内存。这可能会有问题。你应该先输入
cin>gt;n
p_OrderBooks=新的OrderBook[n];
- 在虚幻引擎中删除NXOpen对象时崩溃
- 无法删除EXE崩溃后,即使进程未显示在任务管理器中
- 删除SDL_PollEvent时程序崩溃
- 删除数组 c++ 崩溃问题
- 在C++中删除指针数组时析构函数崩溃
- 使用自定义上下文菜单删除 QTreeView 项崩溃
- 如果我从single_digits[*num - '0']]中删除'0',为什么这个程序会崩溃)
- 删除动态字符串时程序崩溃
- 当删除上下文属性中的QLIST对象时,QT QML应用程序崩溃
- 删除关键字导致程序崩溃
- C++将自删除推回矢量时崩溃
- 为什么要删除指针崩溃wchar_t?
- 试图删除最后一个std ::向量元素时,程序会崩溃
- 当我尝试删除指针时,我的程序崩溃
- 当我递增指针然后将其删除时,为什么我的程序会崩溃
- qquickvew删除导致应用程序崩溃
- C++:指向对象的指针数组 - 删除元素时程序崩溃>
- c 从范围删除对象的操作员导致崩溃dealloceLoceLoceLoceLoceLoceLoceLoceLoceL
- libpng 的C++抽象导致 malloc 崩溃 -- 删除 2D 数组"Jagged"
- 崩溃删除[]初始化的字符串