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