关于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。

posted @ 2021-05-03 19:16  cheems~  阅读(69)  评论(0编辑  收藏  举报