65,005
社区成员
#include<iostream>
using namespace std;
class people
{
public:
int a;
virtual void seta(int b)
{
}
~people()
{
cout << "1" << endl;
}
};
class stu:public people
{
public:
int a;
void seta(int b)
{
a = b;
}
~stu()
{
cout << "2" << endl;
}
};
int main()
{
people a;
people* p = new stu;
delete []p;}
#include<iostream>
using namespace std;
class people
{
public:
int a;
virtual void seta(int b)
{
}
~people()
{
cout << "1" << endl;
}
};
class stu : public people
{
public:
int a;
void seta(int b)
{
a = b;
}
~stu()
{
cout << "2" << endl;
}
};
int main()
{
people a;
stu* p = new stu;
delete p;
return 0;
}
错误使用 delete []:在 C++ 中,delete [] 运算符用于释放使用 new [] 运算符分配的数组内存。但是在你的代码中,你使用 delete [] 来释放单个对象 p 的内存,这是错误的。应该使用 delete 运算符来释放单个对象的内存,而不是 delete []。
指针类型不匹配:在主函数中,你声明了 people* p 指针并分配了一个 stu 类型的对象给它,然后你尝试释放该内存。然而,由于 p 是一个指向基类 people 的指针,而不是指向派生类 stu 的指针,所以在释放内存时会导致未定义的行为。为了正确释放内存,你应该将 p 声明为 stu* 类型。
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
支持,推荐图形界面编程:https://blog.csdn.net/u010165006/article/details/122217326 多图、实例、书籍
————————————————————