转载自沙子泥巴刘的博客
前言
最近被一个在sort自定义排序导致的崩溃问题, 弄得焦头烂额. 后在网上看了这篇文章, 才解决问题, 转载一次.
正文
近期我们开发的一个工具在调用c++ sort函数对数组进行排序时居然会导致进程崩溃,此问题细节我觉得对于类似我这种不常用stl的同学可能不容易觉察,这里简单总结下。
出错代码
因为代码太复杂不好展示,我这里就用下面这个简单的示例来描述。
#include <algorithm>
bool comp(int d1, int d2)
{
return d1 >= d2;
}
const int N = 50;
int main()
{
int d[N];
for(int i = 0; i < N; ++i)
{
d[i] = 20;
}
std::sort(d, d + N, comp);
return 0;
}
不知你是否直觉上也会觉得这段代码没什么问题,但是这段代码运行后会core dump。查看core文件可以看到内存里的栈被写坏了,这说明sort调用导致了内存越界访问,在这么少的代码行下,不难判定应该是comp函数实现可能不符合c++标准库的某种规则(C++ STL是基于concept的设计和实现)。
继续阅读