关于malloc和free

简介: 关于malloc和free

malloc

指在堆区开辟空间给用户使用,而这个区域最大是取决于内存大小

free

free(void* p)的参数只有一个,把用malloc开辟的空间销毁掉,而free仅仅传入的是一个首地址,那么free是怎么确定malloc开了多少个字节的呢?

决定free释放多大的内存块,是在malloc的时候就已经确定了

实际上在malloc的时候,会自动在p地址的前面4或8个字节内,额外分配空间,用来记录管理信息,随后free( p) 时会自动偏移,所以用户不必操心,大致原理如此,细节可能有误

free的作用

我们在写int *p=(int *)malloc(sizeof(int)*5)的时候,就在堆空间声明了这块区域属于我来使用,而free之后,意思是这块区域不归我使用了,就像去开房,我拿到的钥匙,free就是把钥匙归还给前台,就是向系统声明,这块区域不归我啦,但是这个时候p依旧指向这个区域,这个时候p就是野指针!所以要及时置为NULL


free()函数仅仅是告诉操作系统,这块空间我不用了,操作系统收回空间。而指向这块空间的指针并没有改变,它的值仍然指向这块空间。这样就可以继续使用该指针操作内存,这会带来非常大的安全隐患。所以合理地做法是,在调用free()函数后,将指针的也赋值为NULL。


目录
相关文章
|
2月前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
7月前
|
存储 C语言
malloc
【6月更文挑战第16天】
79 8
|
2月前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
3月前
|
程序员 编译器 C语言
C中的 malloc 和C++中的 new 有什么区别
在C语言中,`malloc`函数用于在运行时分配内存,返回指向所分配内存的指针,需显式包含头文件 `<stdlib.h>`。而在C++中,`new`不仅分配内存,还对其进行构造初始化,且直接使用类型声明即可,无需额外包含头文件。`new`还支持数组初始化,能更好地融入C++的面向对象特性,而`malloc`仅作为内存分配工具。使用完毕后,`free`和`delete`分别用于释放`malloc`和`new`分配的内存。
70 21
|
7月前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
525 1
|
7月前
|
C语言
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
80 0
|
7月前
|
程序员 C语言
C语言内存管理:malloc、calloc、realloc与free函数详解
C语言内存管理:malloc、calloc、realloc与free函数详解
233 0
|
8月前
|
存储 安全 编译器
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
98 0
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
|
8月前
|
程序员 编译器 C语言
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
50 0
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)
|
7月前
|
缓存 C语言
glibc函数malloc的工作原理
glibc函数malloc的工作原理
53 0