问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一个c++程序显示段错误,main函数中断点调试到getresult()显示有段错误

发布网友 发布时间:2022-06-01 17:29

我来回答

1个回答

热心网友 时间:2023-10-09 17:32

错误在你是在栈中申明对象的,当g调用之后,对象b或者对象c以及被销毁了,而test指向的地址自然也就是一个未知的地址,所以出现错误。正确的方法,应该使用new在堆中申请内存。

case 0:
             {b bt;
             test=&bt;
             break;}

修正后的代码

#include <iostream>
#include <memory>
using namespace std;

class a{
public:
virtual void getprice(double&){};
};
class b:public a
{
public:
    b(){};
    void getprice(double& money)
{
cout<<"b"<<endl;
};
};
class c:public a
{
private:
    double rate;
public:
    c(){};
    c(double ra){rate=ra;};
    void getprice(double& money)
    {
        money=money*rate;
        cout<<"c"<<endl;
    };
};
class g
{
private:
    a* test;
public:
    g(int i)
    {
        switch(i)
        {
case 0:
test=new b;//在堆中申请内存
break;
case 1:
test=new c(0.8);//在堆中申请内存
break;
        }
    };
    void getresult(double money)
    {

        test->getprice(money);
        cout<<money<<endl;
    }
~g(){//在析构函数中释放内存
if (test){
delete test;
cout<<"Destructor test object"<<endl;
}
}
};
int main()
{
    g tes(1);
    tes.getresult(100);
    cout<<"ok"<<endl;
    return 0;
}

追问按你说的成功了,只是有几点不太明白:在栈中声明对象,是什么栈?属于g的类的栈?为什么g被调用之后会被销毁? 我有点小白··· 已经明白了 谢谢

追答至于什么是堆、什么是栈,这个问题你还是到网上多查一查!
只有懂了什么是栈,你才能明白什么每个变量的生存周期是什么?
所以,我只能给你建议和方向,具体的还需要你自己学习!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人字梯有什么安全隐患吗 怎样激发青春期孩子的内驱力 如何激发青春期孩子的内驱力 ...小题1:移船相近邀相见,添酒回灯重开宴。 , &amp;n... L1和L2串联 电压表并联在L1两端 当L1断路后 电压表测的为什么就成了电源... L1和L2串联,用电压表测L1两端的电压,L2不亮时,电流表为什么测的是电源电... 电路上传连两个灯泡L1与L2电压表测L1电压,当L1短路与断路时电压表情况... 对方拖着不办离婚手续该怎么办 计算机一级电子表格怎么拿分 如何配置思源黑体为latex中文字体? 思源黑体字体怎么安装 如何发现隐藏的段错误 LINUX下C出现段错误如何有GDB调试? 嵌入式中segmentation fault 怎么调试 在LINUX下运行错误:段错误,怎么改 链表,段错误,求高手指导! 程序调用动态链接库的段错误要怎么调试 断点调试错误是什么样子 日本有哪些奇葩的电视节目? soybean milk的汉语。 今天下了,金山词霸,把离线词典下下来了,可是不知道怎么用,求指教。 大圆脸适合什么发型呀,头发不是很多,还有点自然界 VT 水乳适合混油皮吗? vt水乳用了长斑吗? 当年没钱没房被瞧不起,和王宝强一起爆红,如今前女友后悔了吗? 紫苏蒸猪头骨怎么弄好吃 有谁了解过捧音app的NFT呢? 怎么开发自己的nft平台 女性在职场中被歧视,该如何维权? 女性在职场中如何利用自身优势? 《婚姻的两种猜想》中展现出了女性在职场中会遇到的哪些困境? C++出现段错误如何检查? 吃茄子是不是能补铁 我爱吃茄子? 贫血的时候吃什么能好受点 仙剑4详细玩法 仙剑4怎么玩? 仙剑4开始怎么玩、 仙剑奇侠四怎么玩? 仙剑奇侠传4玩法 哪个厂能买到大直径的无缝钢管?如630、530、450等!!!急求无缝钢管.... 仙剑奇侠传4单机游戏怎么玩 英语翻译 献出爱心 我们是一家人 我们都是一样的 爱护动物 保护动物 爱护我们自己 仙剑4怎么玩 仙剑奇侠传四怎么玩? 仙剑4怎么玩???求求告诉我 仙剑四怎么玩?主要的意思是什么? 求助:英语短文翻译 翻译英语歌词 为什么现在印刷的书的字体大部分用“宋体”,和“黑体”这两种比较常见? 仙剑奇侠传4怎么玩 键盘上那些键什么用 怎么跳的远 也就是游戏指南