【问题标题】:std::sort function gives "Bus error: 10"std::sort 函数给出“总线错误:10”
【发布时间】:2015-12-05 06:26:37
【问题描述】:

以下代码给出了“总线错误:10”,尽管当 n 更改为 30 时它可以正常工作。我真的没有看到该错误的任何单一原因。您认为为什么会发生这种情况?

#include <algorithm>
#include <cstdio>
#define MAX 100000
using namespace std;

struct suffix
{
    int cur;
};

suffix suffixes[MAX];

bool cmp(suffix a, suffix b)
{
    return (a.cur <= b.cur);
}

int main()
{
   int n = 1000;
   sort(suffixes,suffixes + n,cmp);
   return 0;
}

【问题讨论】:

  • 您使用的是什么平台/操作系统?你的机器有多少内存?
  • MacOS,2.7GHz 双核 Intel Core i5,8 GB RAM
  • sort 需要一个比较函数来进行单调排序。将&lt;= 更改为&lt; 看看是否有帮助。见stackoverflow.com/questions/2385690/…

标签: c++ struct stl


【解决方案1】:

您的比较功能有问题。它不满足std::sort 所期望的the requirements。它需要给出一个严格的弱排序,它必须为等效元素返回false。尝试将其更改为:

bool cmp(suffix a, suffix b)
{
    return (a.cur < b.cur); // note comparison is < instead of <=
}

【讨论】:

  • 确实有帮助,谢谢。但是为什么你认为有35这样的门槛呢?
  • @Enes:如果您违反算法的先决条件,可能会导致未定义的行为。崩溃是一种可能的结果,具体的阈值并不重要。
  • @Enes - 仅供参考,如果您使用 Visual C++ 编译器,则会检测到此错误(在调试运行时中)并且您的程序会因断言而停止。 Visual C++ 检查这一点的方式是调用您的cmp 函数两次——第一次使用(a,b),第二次使用(b,a)。如果您对两个调用都给出了true 的答案,则运行时断言。原因是没有办法a &lt; b,同时b &lt; a。
猜你喜欢
  • 1970-01-01
  • 2016-07-14
  • 2019-11-17
  • 2018-07-05
  • 1970-01-01
  • 2017-07-06
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多