析构函数调用“已停止工作”错误

时间:2015-10-21 20:27:34

标签: c++ destructor

MainClass *mb[1];
Class1 *m1;     
cout << "Constructor type (1 - no parameters || 2 - with parameters): ";
    int choose;
    cin >> choose;
    if (choose == 1) {
        mb[1] = new Class1;
    }
    else if (choose == 2) {
        mb[1] = new Class1("Red", 1);
    }
    m1 = dynamic_cast<Class*>(mb[1]);
    m1->printEverything(); 
    getchar();

之后,Windows 10抛出“Program1.exe停止工作”。 试图添加删除mb [1],但没有运气。

析构函数:

~Class() {
    cout << endl;
    getchar();
}

如何删除派生类对象?

2 个答案:

答案 0 :(得分:1)

解除分配应该通过以下方式完成:

delete mb[0]

您应该使用mb [0]访问数组的第一个元素

答案 1 :(得分:1)

您需要将对象存储在foreach ($this->getRequest()->getCookie() as $name => $value) { echo 'Campo: ' . $name . ' with value ' . $value . '<br />'; } (而不是public function callerAction() { $cookie = new \Zend\Http\Header\SetCookie(); $cookie->setName('foo') ->setValue('bar') ->setDomain('gnsys.local') ->setPath('/') ->setHttponly(true); /** @var \Zend\Http\Response $response */ $response = $this->getResponse(); $response->getHeaders()->addHeader($cookie); return $this->redirect()->toUrl('/publico/login'); } )中,因为在C和C ++中数组索引是基于0的,并且您只为mb[0]中的一个元素保留了空间。读取或写入mb [1]会在程序中产生未定义的行为,通常会导致崩溃。

取消分配您的对象必须使用mb[1]mb用于解除分配delete mb[0]的内存。