月度归档:2018年08月

sort 导致进程崩溃

转载自沙子泥巴刘的博客

前言

最近被一个在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的设计和实现)。
继续阅读

合格的程序员

一个掉队的伙伴

前几天开除一个下属, 称他为A吧, 理由是负责的项目发生太多线上事故, 工作将近一年,产出太少. 做出这个决定是艰难的,意味着一年对他的培养付诸流水. 不仅是对A的一种伤害, 对公司, 直属负责人, 都是不小的损失. A有太多的毛病, 其中最严重的就是懒. 懒所以不学习, 不学习就不会进步, 思虑不周, 导致线上问题频发. 因为懒所以进度慢, 进而没有产出. 所以,怎样才是一个合格的程序员呢?

做一个勤奋的人

这是个很泛的概念, 怎样才能称得上勤奋? 是加班到12点? 熬夜赶项目? 这个没有定论. 个人觉得勤奋是一种思想, 一种体现在行动上的思想.
继续阅读