glibc detected corrupted double-linked list: 0xb78381d8 *
    ======= Backtrace: =========
    /usr/lib/libc.so.6[0xb7781d3b]
    /usr/lib/libc.so.6[0xb7781e77]
    /usr/lib/libc.so.6[0xb7782d50]
    /usr/lib/libc.so.6(malloc+0x71)[0xb7783f2c]

    后面的call stack是自己程序的函数调用

    可能原因:

    1. 重复释放

      1. int* a = new int(10);
      2. delete a;
      3. delete a; // <---- 这个
    2. 释放未初始化的指针

      1. int* a;
      2. delete a; // <---- 这个
    3. 内存越界踩踏

      1. char s[10];
      2. int* a = new int(10);
      3. sprintf(s, "1234567890");
      4. delete a; // a 被前面的给覆盖了