我正在处理一个大代码,并且在调用析构函数时程序崩溃。我指定失败的地方:
Application::~Application()
{
for ( int blockId=0; blockId< m_noBlocks; blockId++ ) {
if ( m_blocks[ blockId ] ) {
delete m_blocks[ blockId ]; //error here
m_blocks[ blockId ] = NULL;
}
if ( m_methods[ blockId ] ) {
delete m_methods[ blockId ];
m_methods[ blockId ] = NULL;
}
}
}
该程序完全在“此处错误”中提到的删除操作中崩溃。但是,如果我对此行发表评论,该程序似乎可以正常运行。有人可以照亮,可能是什么问题?
编辑:
它们使用
new
在构造函数中分配。 m_noBlocks
是用值定义的,此处未指定:Application::Application(){
m_blocks = new ZFSBlock*[m_noBlocks];
m_methods = new ZFSMethods*[m_noBlocks];
for ( int blockId=0; blockId< m_noBlocks; blockId++ ) {
m_methods[ blockId ] = NULL;
m_blocks[ blockId ] = NULL;
}
}
但是,稍后在代码的主要部分中会实际分配
m_methods
和m_blocks
。 最佳答案
m_noBlocks
未被初始化,因此没有人可以预测您有多少指针可以存储。
关于c++ - 析构函数调用删除函数时程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18111139/