我在 gcc 4.8 版本上编译程序时,在程序的运行时突然抛出了一个 " logic error std::string not null " 的错误。
网上对 "logic error " 的解释:
class logic_error
此类用作引发报告执行程序前大概可检测的错误(例如,违反逻辑前提条件)的所有异常的基类。
class logic_error : public exception {
public:
explicit logic_error(const string& message);
explicit logic_error(const char *message);
};
以前在 gcc 4.4 上编译的时候从未出现过这情况,而且不是一直都出现这种错误,而且偶尔才出现这情况。于是,只有 gdb 单步调试查看哪出问题。
很快,在一个 std::string 的字符串初始化的地方,引发了这个 bug。原来函数的返回值是一个 string 类型,而在某个分支里面却返回了 false 这个布尔值类型。当 false 这个布尔值类型赋值给 std::string 初始化的时候,编译器把这个 false 当作是 NULL 空指针,而给 std::string 赋值一个 NULL,则会触发 " logic error " 异常。