我正在处理一个大代码,并且在调用析构函数时程序崩溃。我指定失败的地方:

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_methodsm_blocks

最佳答案

m_noBlocks未被初始化,因此没有人可以预测您有多少指针可以存储。

关于c++ - 析构函数调用删除函数时程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18111139/

10-11 23:04