关于用malloc函数申请0字节内存的进一步讨论——《C语言深度解剖》笔记
来源:互联网 发布:中国象棋人机对战软件 编辑:程序博客网 时间:2024/04/28 07:02
环境:vs2008
关于malloc和free:
malloc两次,free一次会内存泄漏,当时无现象,但机子会越来越慢;malloc一次、free两次肯定会出错。如下:
另外,对NULL可无数次的free。至于为什么,我认为free对于NULL无意义,所以free不free无所谓。如果让我来设计free函数,也这样设计,让那些蛋疼的人去纠结这样的问题,⊙﹏⊙b
“另位还有一个问题:用malloc函数申请0字节内存会返回NULL指针吗?
可以测试一下,也可以去查找关于malloc函数的说明文档。申请0字节内存,函数并不返回NULL,而是返回一个正常的内存地址,但是你却无法使用这块大小为0的内存。这好比尺子上的某刻度,刻度本身并没有长度,只有某两个在一起才能量出长度。对于这一点一定要小心,因为这时候if(NULL!=p)语句校验将不起作用。“
不是无法使用,而是不能使用,(貌似差不多啊⊙﹏⊙b汗)就是你可以往这个地址存数据,但是可能就被后面别的内存分配语句分配掉给别的变量,就有被覆盖掉的可能。
char *cp=(char *)malloc(0); *cp= 'q'; //cp=0x0039210,看到存进去'q'了,就是ASCII为0x71
经实验所得,当你申请大小为0的内存,不存数据,然后再free它是没有问题的;
char *cp=(char *)malloc(0); free(cp);
当你往里面存了一个数据之后再free掉这个指针,就报错了~~~
char *cp=(char *)malloc(0); *cp= 'q'; //cp=0x0039210,为啥vs2008每次都分的这个啊?不是在栈里随机的么?看来编译器设计时不是设定随机的。 free(cp); //最好不要没事就来挑战编译器的智商
- 关于用malloc函数申请0字节内存的进一步讨论——《C语言深度解剖》笔记
- 关与对《C语言深度解剖》函数指针的进一步探讨
- C语言深度解剖——读书笔记-12、内存管理
- C语言深度解剖——学习笔记(内存管理)
- malloc函数申请0字节的问题
- C语言深度解剖笔记
- 《C语言深度解剖》笔记
- C语言深度解剖--笔记
- c语言深度解剖笔记
- 关于《C语言深度解剖》一些例程的实验和感悟——关键字static
- C语言深度解剖读书笔记(5.内存管理的艺术)
- C语言深度解剖读书笔记(5.内存管理的艺术)
- C语言深度解剖读书笔记(5.内存管理的艺术)
- C语言深度解剖读书笔记(6.函数的核心)
- C语言深度解剖读书笔记(6.函数的核心)
- C语言深度解剖读书笔记(6.函数的核心)
- C 笔记 free()释放一个非malloc() 申请的内存
- C语言深度解剖 学习笔记
- 比赛分数的计算
- 两个整数的最大公约数和最小公倍数
- NO.2 C++的cout高阶格式化操作<转载>
- android4.0.3 添加Ethernet
- 输入一串字符,分别输出字母 数字 符号的个数,以$结束
- 关于用malloc函数申请0字节内存的进一步讨论——《C语言深度解剖》笔记
- Office 2007无法卸载也无法安装的解决
- 堆排序实现
- mva2 tests && mpiP
- TS 流解码过程
- C#目录与文件总结
- 1000以内的阿姆斯特朗数
- MyEclipse中复制项目注意点
- 4.2.2 堆分配存储结构