.

.

.

.

.

LZ 今天在写一个 Socket 程序的时候使用 malloc(3) 在堆上动态分配了一个结构体的空间,在使用完之后用 free(3) 函数释放空间的时候报 invalid next size 这样的一个错误,经过了两个小时的调试,最后发现是因为粗心越界导致的。

LZ 把这个错误缩减为一个最简单的模型发布出来:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4
 5 int main (void)
 6 {
 7         char *p = NULL;
 8
 9         // 在堆空间申请 8 字节的内存
10         p = malloc(8);
11
12         // 实际使用超过 8 字节
13         strncpy(p, "abcd", 128);
14         // 可以正常打印
15         printf("p = %s\n", p);
16
17         // 释放内存时会报 invalid next size 错误
18         free(p);
19
20         return 0;
21 }

编译运行:

>$ gcc -Wall free.c -o free
>$ ./free
p = abcdefghijklmn
*** glibc detected *** ./free: free(): invalid next size (fast): 0x00000000020c3010 ***
...此处生略 n 行...

打印是不受影响的,但其实在 strncpy(3) 的时候就已经越界了,所以发生什么情况都是正常的。

另外对于上面这个栗子,使用 strcpy(3) 替代 strncpy(2) 就不会报错了,但是一旦要拷贝的字符超过了 8 个字节,依然可能引发错误。

所以大家在使用内存的时候一定要注意长度,千万不可越界。

C 语言 *** glibc detected *** free(): invalid next size (fast): 0x0000000000be1010 ***相关推荐

  1. free(): invalid next size (fast):错误及解决方案

    ./a.out: free(): invalid next size (fast): 0x000000000c29d010 *** 今天在翻写算法的时候,出现了以上的错误 这种错误的原因: 一般是对内 ...

  2. *** glibc detected *** java: free(): invalid next size (fast): 0x00000000024b19d0 ***

    2019独角兽企业重金招聘Python工程师标准>>> 是内存泄露的问题. (1)一般是free了没有分配的内存 (2)是malloc函数分配的堆空间操作越界了.例如strcpy(s ...

  3. 内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]...

    前段时间开发的一个后端C模块上线后,线上出core,初始时,因为訪问压力不大,所以崩溃是上线3天左右出现的.当时用gdb跟进调用堆栈并检查源代码,发现出core位置的代码沒有啥问题.因为当时开发任务较 ...

  4. *** glibc detected *** malloc(): memory corruption

    以下错误,发现是由于memset越界写引起的. *** glibc detected *** malloc(): memory corruption: 0x09eab988 *** 在Linux Se ...

  5. C++编程问题--glibc detected *** ./a.out: munmap_chunk(): invalid pointer: xxxxxx

    编写了一个链表操作的程序,如下: #include <iostream>using namespace std;class Element { public:Element* prev;E ...

  6. C语言扩展动态内存报错:realloc(): invalid next size: 0x0000000002365010 ***

    晚上被这个内存扩展崩溃的问题折腾的有点崩溃,当答案揭晓的那一刻,恍然大悟,原来如此简单. 练习题目:输入一个字符串,根据字母进行排序,说白了就是一个简单的冒泡 #include <stdio.h ...

  7. glibc detected *** double free 错误解决方法

    glibc detected *** double free 错误解决方法 定位问题:*** glibc detected *** : double free or corruption (!prev ...

  8. 【kafka】kafka 启动报错 InvalidReceiveException: Invalid receive (size = -720899)

    1.概述 kafka启动报错InvalidReceiveException: Invalid receive (size = -720899) 参考文章:https://bbs.csdn.net/to ...

  9. invalid button size rid: 5fd188c8-1d752f57-0d53f85f

    微信公众号菜单修改时,提示错误:invalid button size rid: 5fd188c8-1d752f57-0d53f85f 经测试发现,提交的json数据中不能包含 :"sub_ ...

最新文章

  1. Python基础18-常用模块之os、sys、json、pickle、shelve、xml、re、logging、configparse、hashlib等
  2. 相似图片检测:感知哈希算法之aHash,dHash,pHash的Python实现
  3. 九种东西吃多会...
  4. 中文NER任务实验小结:BERT-MRC的再优化
  5. [转] Transformer图解
  6. 初级线段树讲解---转
  7. Remmarguts' Date(POJ2449+最短路+A*算法)
  8. Win 2003系统传真功能的配置及使用
  9. Eclipse ADT 使用空格替代Tab键缩进整块整块代码
  10. mysql 数据库隔离级别_彻底搞懂mysql数据库四种隔离级别,实验实战
  11. Android 四大组件学习之Service七
  12. 软件开发模型:瀑布模型,增量模型,原型模型,螺旋模型,喷泉模型,敏捷开发模型
  13. Mac 下拷贝文件到移动硬盘
  14. Windows server 2008 R2安装详细教程
  15. java pfx 和cer_pfx证书和CER证书
  16. 关于PhotoShop中保存CMYK格式TIFF文件在GDI+错误地显示颜色的问题解决方法
  17. 河南省高中计算机会考难不难,关于河南省的高中会考我想说。。。
  18. C#:实现字数统计函数算法(附完整源码)
  19. [Java实战][仅需1步]企业微信群机器人[0基础接入]
  20. 将netcore发布到docker的其他端口上

热门文章

  1. Android应用程序组件Content Provider的启动过程源代码分析(1)
  2. 你的设备中缺少重要的安全和质量修复_城市排水管道三类非开挖修复技术汇总...
  3. python实现ks算法_Python实现Dijkstra算法
  4. Xamarin Essentials教程数据传输DataTransfer
  5. swift1.2语言函数和闭包函数介绍
  6. 切割图形_3D打印、激光切割、图形化编程,六一科普活动喊你来报名啦!
  7. gets会读取回车键吗_Linux Shell 读取从键盘输入的数据
  8. python寻找相似用户_Python 寻找相近的用户
  9. [unreal4入门系列之四] 熟悉虚幻4项目浏览器界面
  10. 他22岁在家自造芯片,性能接近英特尔初代,连光刻机都有解决方案