实际上,分段错误发生在我尝试编译的另一个程序中,这是由于这种行为而发生的。
我的问题是:
这是一个错误还是我的错?
可以以任何方式重现(即使该something
字段是私有的或受保护的),这是我的示例:
主.cc:
#include <iostream>
class Test {
public:
const char* something = "SOMETHING HERE!!!";
Test(const int& number) : Test(something, number) { }
// XXX: changed `something` to `_something` to make it different
Test(const char* _something, const int& number) {
std::cout << _something << std::endl;
std::cout << number << std::endl; }
~Test() { }
};
int main(int argc, char* argv[]) {
Test te1(345);
Test te2("asdasdad", 34523);
return 0;
}
以下是编译时发生的情况:
g++ main.cc -Os -o main
并运行:
./main
输出是:
pi@pi:~/ $ ./main
A"�~ <-- this is random
345
asdasdad
34523
-O0
但是当我使用or -O1
or ...启用优化时-O2
,输出只是一个新行:
pi@pi:~/ $ ./main
pi@pi:~/ $
G++ 版本:
pi@pi:~/ $ g++ --version
g++ (Raspbian 6.3.0-18+rpi1) 6.3.0 20170516