求助 我把虚函数删了就一直输出1无限下去,但不删就会有图片的报错问题,把[]去掉运行结果正确但为什么之前那两种情况会错?

小许不睏 2023-06-02 15:37:01

#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;}

 

...全文
139 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-06-02
精选
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/7956509, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态
命运之光 2023-06-06
  • 打赏
  • 举报
回复 1

#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* 类型。

赵4老师 2023-06-05
  • 打赏
  • 举报
回复

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

ooolinux 2023-06-02
  • 打赏
  • 举报
回复

支持,推荐图形界面编程:https://blog.csdn.net/u010165006/article/details/122217326 多图、实例、书籍
————————————————————






小许不睏 2023-06-02
  • 举报
回复
@ooolinux

64,700

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧