使用 g++ 版本
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~16.04)
,当我编译此代码(如 g++ -O3 <file>
)并运行可执行文件时,应用程序会给出 seg 错误
#include <iostream>
#include <cmath>
#include <string>
void test() {
std::cout << "test: " << std::endl;
std::cout << "init" << std::endl;
std::cout << "inf" << std::endl;
std::cout << std::to_string(INFINITY) << std::endl;
std::cout << "init done" << std::endl;
}
int main ()
{
std::cout << "test: " << std::endl;
std::cout << "init" << std::endl;
std::cout << "inf" << std::endl;
std::cout << std::to_string(INFINITY) << std::endl;
std::cout << "init done" << std::endl;
return 0;
}
~
seg 错误调用堆栈如下:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400f01 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > __gnu_cxx::__to_xstring<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, char>(int (*)(char*, unsigned long, char const*, __va_list_tag*), unsigned long, char const*, ...) [clone .constprop.20] ()
(gdb) bt
#0 0x0000000000400f01 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > __gnu_cxx::__to_xstring<std::__cxx11::basic_string<char, std::char_traits<cha
r>, std::allocator<char> >, char>(int (*)(char*, unsigned long, char const*, __va_list_tag*), unsigned long, char const*, ...) [clone .constprop.20] ()
#1 0x0000000000400c63 in main ()
有趣的是,当我评论
test
函数时,它就不会发生..不确定是否是内存损坏的情况
其他事实
-O3
这是一个旧的 gcc bug,已在后续版本中修复。