aaaa0ggmc_ 2022-08-29 13:23 采纳率: 33.3%
浏览 44
已结题

C++ try,catch与野指针的问题

问题相关代码,请勿粘贴截图
for(Mod mod : mh.mods){
        al("Mod " + mod.path);
        mod.info = mod.GMI(basicInfo);
            al("Mod " + mod.info.name);//Log输出,debug时会输出至控制台
    }
运行结果及报错内容

最后程序以各种乱码输出并崩溃,但中规中矩都是0xC0000005

我的解答思路和尝试过的方法

由于这个报错是我有意而为之,我当然知道问题在哪里。那就是GMI(xx)没有返回值,导致出现了野指针(有时又是空指针)【即mod.info.name.c_str()不是一个有效的地址】,于是我便用了try&catch

  try{
            al("Mod " + mod.info.name + " " + mod.path + ":\nAuthor:" + mod.info.author + "\nDescription:" + mod.info.Description + "\n");
        }catch(exception&){
            mod.info = ModInfo();
            al("Mod " + mod.path + " returns a bad value when get the info!");
        }
    }

报错是不报错了,但是程序并不输出异常处理的IO行,反而继续输出异常出现的地方,只不过这次输出为空:

[2022-08-29 13:22:20]:1098.828700ms:Mod  C:\Users\yd\AppData\Roaming\StudyAll\UnlimitedLife\Mods\ULSimpleMod.dll:
Author:
Description:
我想要达到的结果

我想要代码执行catch中的内容

  • 写回答

3条回答 默认 最新

  • aaaa0ggmc_ 2022-08-29 19:57
    关注

    好吧,最后只能让我放弃try&catch了,我选择在结构体(类)里添加一个bool属性,叫做isObjVaild,c++构造时默认值为false,那么要想让isObjValid为true,则GMI必须返回值,因此来判断并处理这种较为极端的状况。(当然,如果在DLL函数里面强行让string的data()指向异常地址并返回还是不可避免的)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 已采纳回答 8月29日
  • 创建了问题 8月29日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装