c – 如何使用消息正确创建自定义异常?
我是C的新手,我正在尝试创建一个自定义异常,它在其ctor中接收一条消息.
我现在拥有的是: class LevelLoadException : public std::exception { public: LevelLoadException(std::string msg) : m_message(msg) { } const char * what () const throw () { return m_message.c_str(); } private: std::string m_message; }; 在我的调用代码中,我将它作为switch语句的一部分(c是char,或者更具体地说,c = line [x];其中x是int,line是std :: string); default: throw LevelLoadException("Invalid Character in Level: " + c); 问题是我的Exception获得了一个完全不相关的字符串(这是抛出相同方法的一部分:throw std :: exception(“在级别中有超过1个玩家开始.”)). 我已经排除了一个逻辑错误 – 我的程序到达了正确的字符串抛出正确异常的行.所以我很确定这是一个终身/内存管理问题. 根据我的理解,C默认是按值复制的.所以我认为调用LevelLoadException的ctor会立即复制字符串.但似乎有一些指针正在进行,因为我正在构建的字符串看起来像一个C字符串(const char *). 我查看了std :: exception类,这需要一个const char * const&作为消息,然后在引擎盖下做一些类似C的strcopy / malloc(MSVC / Visual Studio 2012 Update 4). 我不是百分之百确定我真正需要的东西.我想我想要的是一个在调用者中构建的字符串,然后移动/复制到Exception(它现在拥有只由异常拥有的字符串的副本)然后调用者中的那个被删除范围. 有人可以给我a pointer我应该做的不同做这件事吗? 解决方法
“级别中的字符无效:”c不会按照您的想法执行此操作.它表示“一个char *指针,它从字符串文字的开头偏移N个字节”,其中N是存储在c中的字符的ASCII代码.机会很高,文字实际上比N个字符短,在这种情况下,该程序包含缓冲区溢出并显示未定义的行为.
做了 throw LevelLoadException(std::string("Invalid Character in Level: ") + c); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – 如何根据ValueMember在ComboBox中设置所选内容?
- ruby-on-rails – 无法用font-awesome覆盖bootstrap-sass的
- Swift中的无锁共享变量? (功能不稳定)
- XML中二进制数据的处理方法
- OOD 事务模型 和 BCE模式 -- 读《UML和OOAD快速入门》
- 正则表达式 – HAPROXY中ACL的子域中的通配符
- ruby-on-rails – 重定向后Rails会话不会持续
- C 语言指针变量的运算详解
- Flash 备忘两个问题 1.BitMapData 最大像素 2.Math.round(P
- flash builder4安装时遇到的exit code 7