malloc导致core dump
来源:互联网 发布:淘宝账号怎么升级心 编辑:程序博客网 时间:2024/06/05 21:02
一次很偶然的机会,发现在调用某个函数的时候,发生core dump的情况。用gdb的bt命令没看出啥来,用x/20x value查看,发现在调用malloc函数时,x/20x value的内存发生改变了,很显然,这个不太可能,实在百思不得其解。只好在每个关键地方都调用malloc来逼近问题最接近的地方。最后,发现有个地方使用malloc(sizeof(var))来分配内存,却使用memset(var , 0 , sizeof(var_t))来清空内存,导致内存溢出。
这里用到了几个技巧值得记录下:
1、gdb 来确定core dump的地方
2、由于原因不在发生core dump的地方,所有用内存检查的方式来确定发生内存变化的地方。
3、确定malloc导致内存发生变化,使用malloc尽早的引起core dump,来逼近最根本的地方。
4、通过大范围到小范围多层次来逼近问题的根本原因。
===================
在64位机器上,调用malloc会出现coredump的问题
可能有下面的原因:
malloc在stdlib.h中的原型为:
void *malloc (size_t size);
如果没有包含头文件,函数没有声明就直接使用,那么C语言默认函数的返回值是int型,即如果没有包含头文件,那么malloc函数的原型为:
int malloc(size_t size);
如果编译成64位的应用程序,那么sizeof(int) = 4并且sizeof(void *) = 8, 比如malloc本来返回的地址为0xFFFFFFFFFFFF1111, 由于没有函数声明,系统默认malloc返回的类型为int,将上面的地址高32位截取后就得到0xFFFF11111,即对malloc返回值的任何操作都是在地址0xFFFF11111上做的。如果0xFFFF1111这个地址不可写,那么就会导致coredump的情况。
如果编译成32位的应用程序,那么sizeof(int) = sizeof(void*) = 4,所以不会出现coredump问题。
可能还有其他方面的原因。
解决方法:
在程序中,添加stdlib.h头文件
- malloc导致core dump
- malloc导致core dump
- 缺少return, 导致core dump
- 两例栈溢出导致的core dump
- 有时候变量不初始化,就会导致core dump
- 栈溢出导致的core dump的定位------千年等一回
- Core Dump
- Core Dump
- Core Dump?!
- Core Dump?!
- Core Dump?!
- core dump
- core dump
- Core Dump
- core dump
- Core dump
- core dump
- Core Dump
- 微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
- Nifi
- 野生程序员眼中的Linux系统
- python 中文注释报错
- Android设置屏幕亮度
- malloc导致core dump
- windows与linux通信文件共享
- C++文件读写详解(ofstream,ifstream,fstream)
- 二叉树3中遍历方法的迭代实现
- c++类的二阶构造
- 第二周—C/C++语言中函数参数传递的三种方式
- Google官方刷题资源
- JavaWeb Filter 检查登录
- Android 中图标的尺寸要求