我正在编写一个 C++ 程序,当我使用优化(选项 -O1、-O2、-O3 等)编译它时它不起作用(我得到一个分段错误),但是当我编译它时它工作得很好优化。
错误是否存在于我的代码中?还是我应该假设这是 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 ;
}
} ;
不幸的是,这个问题很难重现,因为它发生在一些特定的值上。在对一千多个向量中的一个进行排序时,我得到了分段错误,因此它实际上取决于每个向量具有的值的特定组合。