私たちのチームで長い間使用していた大きなコードがあります。しかし、私のマシンでコンパイルすると問題が発生するのは数週間です。コードは Intel Atom CPU 用にクロス コンパイルされ、特定のマシンで実行されます。
私のコンピューターでコンパイルすると、他の人とは異なり、segmentation fault
. セグメンテーション違反は、if
実行されるべきではないブロック内からのものです。
Settings *s = &Global::getSettings();
std::cout << "Pointer value before if : " << s << std::endl;
if(s != 0)
{
std::cout << "Pointer value after if : " << &Global::getSettings() << std::endl;
.
.
.
}
Global::getSettings()
以下のとおりであります:
.
.
.
private:
static __thread Settings* theSettings;
public:
static Settings& getSettings() {return *theSettings;}
.
.
.
__thread Settings* Global::theSettings = 0;
私のテストでは、Global::theSettings の値は変更されず、ゼロに等しくなります。上のコード スニペットの出力は次のとおりです。
Pointer value before if : 0
Pointer value after if : 0
if
質問:ゼロに等しい条件でどのように実行できますか?!
PS: 私は clang++ を使用して、Debian マシンでコードをコンパイルしています。