C++ 析构函数调用;“停止工作”;错误 MainClass*mb[1]; 类别1*m1; 不能选择; 如果(选择==1){ mb[1]=新类别1; } else if(选择==2){ mb[1]=新类别1(“红色”,1); } m1=动态_转换(mb[1]); m1->printEverything(); getchar();

C++ 析构函数调用;“停止工作”;错误 MainClass*mb[1]; 类别1*m1; 不能选择; 如果(选择==1){ mb[1]=新类别1; } else if(选择==2){ mb[1]=新类别1(“红色”,1); } m1=动态_转换(mb[1]); m1->printEverything(); getchar();,c++,destructor,C++,Destructor,在那之后,Windows 10向我抛出“Program1.exe停止工作”。 正在尝试添加删除mb[1],但没有成功 析构函数: MainClass *mb[1]; Class1 *m1; cout << "Constructor type (1 - no parameters || 2 - with parameters): "; int choose; cin >> choose; if (choose == 1) {

在那之后,Windows 10向我抛出“Program1.exe停止工作”。 正在尝试添加删除mb[1],但没有成功

析构函数:

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();
~Class(){

cout应通过以下方式解除分配:

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

使用MB(0)访问数组的第一个元素

,您需要将对象存储在MB(0)(不是<代码> MB(1)< /C> >中,因为数组索引是在C和C++中的0,并且只为一个元素保留了空间,在<代码> MB 中。在程序中产生未定义的行为,通常会导致崩溃


解除您的对象必须用<代码>删除MB(0)< /> > <强> > < < > >删除> []>代码>,分配给内存分配为<代码>新[]/COD> .< /P>数组中的索引是基于C++的。使用MB(0)访问MB[]中的第一个元素。数组,无效。另外,仅使用一个元素的数组是极不寻常的。析构函数可能是虚拟的。不正确。

delete[]
用于释放分配给
new[]
的内存。OP的程序没有
new[]
。现在就对了。但最后你只是抄了我的答案。你可以这么说,但我学到了一些新东西。无论如何,谢谢:)
delete mb[0]