实际上,段错误是发生在我尝试编译的另一个程序中,这是由于这种行为引起的。
我的问题是:
这是一个 bug 还是我的问题?
可以以任何方式复现(即使 something
字段是私有的或受保护的),这里是我的示例:
main.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
或 -O1
或 -O2
等优化时,输出只有一个换行符:
pi@pi:~/ $ ./main
pi@pi:~/ $
G++ 版本:
pi@pi:~/ $ g++ --version
g++ (Raspbian 6.3.0-18+rpi1) 6.3.0 20170516
const char* something = "SOMETHING HERE!!!";
中,你是指_something
吗?如果不是,那么这个变量就没有被设置。 - Mixhab