我正在使用Visual Studio 2010 Beta 2(也尝试使用NetBeans),我在以下代码中遇到了分段错误:
// One of the @link s20_3_3_comparisons comparison functors@endlink.
template <class _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; } //this is the problem line
};
我不知道我的程序中有什么叫它,但我想知道。 (我认为这是一张地图)有谁知道该怎么做,或者之前遇到过这个?
答案 0 :(得分:6)
这段代码没有错;问题在于你的代码正在调用它。 (事实上,由于这是STL的一部分,因此该代码存在问题的可能性极小。)由于释放内存,NULL指针或类似内容,可能会传递无效引用。
默认情况下, less
用于std::map,std::set,以及其他一些我现在没想到的容器,因此您可以检查是否有任何容器容器,例如那些留有无效值的容器。
(实际上,最简单的方法是按照James McNellis的说法 - 在调试器中运行它并查看堆栈跟踪。)
答案 1 :(得分:2)
昨天我遇到了同样的问题。
这是经过试验和测试的代码,因此导致崩溃的可能性很小。
通常这种崩溃有三种可能性:
要诊断此问题,请在VS调试器中运行代码。当您的应用程序崩溃时,查看参数值并检查调试器中显示的堆栈跟踪是否与您应该看到的堆栈跟踪相同(单击堆栈跟踪中的每个条目并查看代码是否调用它应该是什么)。