【发布时间】:2008-11-11 05:09:42
【问题描述】:
我正在编写一个 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 ;
}
} ;
不幸的是,这个问题很难重现,因为它发生在一些特定的值上。在对一千多个向量中的一个进行排序时,我得到了分段错误,因此它实际上取决于每个向量具有的特定值组合。
【问题讨论】:
-
这几乎可以肯定是您的代码中的错误,而不是 GCC 中的错误。发布一些代码或更多信息以获得体面的答案。你在你的应用程序中到底在做什么,它是如何设计的,不仅仅是“它不适用于优化”:) SEGV 表示内存或指针问题,所以从那里开始
-
我叫巨魔。如果原帖者对编程有足够的了解来写这个问题,那么原帖者就知道问题的答案。还要考虑没有任何代码示例。
-
没有代码,我们没有机会帮助您。我害怕。
-
看到您添加的答案后,我很抱歉打电话给巨魔。请理解为什么它看起来是这样的。
标签: c++ gcc compilation