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日

悬赏问题

  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化