最適化 (オプション -O1、-O2、-O3 など) を使用してコンパイルすると動作しない (セグメンテーション違反が発生する) C++ プログラムを作成していますが、オプションを使用せずにコンパイルすると問題なく動作します。最適化。
エラーが私のコードにある可能性はありますか? または、これは GCC のバグであると想定する必要がありますか?
私の GCC バージョンは 3.4.6 です。
この種の問題に対する既知の回避策はありますか?
プログラムの最適化されたバージョンと最適化されていないバージョンでは速度に大きな違いがあるため、最適化を使用する必要があります。
これは私のオリジナルの関手です。最適化のレベルなしで正常に動作し、最適化のレベルに関係なくセグメンテーション違反をスローするもの:
struct distanceToPointSort{
indexedDocument* point ;
distanceToPointSort(indexedDocument* p): point(p) {}
bool operator() (indexedDocument* p1,indexedDocument* p2){
return distance(point,p1) < distance(point,p2) ;
}
} ;
そして、これはどのレベルの最適化でも完璧に動作します:
struct distanceToPointSort{
indexedDocument* point ;
distanceToPointSort(indexedDocument* p): point(p) {}
bool operator() (indexedDocument* p1,indexedDocument* p2){
float d1=distance(point,p1) ;
float d2=distance(point,p2) ;
std::cout << "" ; //without this line, I get a segmentation fault anyways
return d1 < d2 ;
}
} ;
残念ながら、この問題は特定の値で発生するため再現が困難です。1,000 以上のベクトルのうちの 1 つだけをソートするとセグメンテーション違反が発生するため、各ベクトルが持つ値の特定の組み合わせに大きく依存します。