free函数和malloc函数

时间:2021-05-09 18:52:38

初学c和数据结构是对其很不明确,通过一些资料,稍微理解了,所以记下以后复习之用,如果有错误或者理解不当的情况请指正,不胜感激。

一malloc和free函数

malloc函数:(void*)malloc(sizeof(byte)),向系统申请大小的空间,然后返回指向这个内存的指针。如果内存分配失败,则返回一个空指针(NULL)当然,造成内存分配失败的吗原因有很多,其中一个是内存不足。

而free就是把这个操作空间返回给系统,释放这块内存。具体代码使用情况很简单

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 void main()
 4 { 
 5   int *a;
 6   a=(int*)malloc(sizeof(int));
 7   if(!a)
 8       exit(-1);
 9   free(a);
10    a=NULL;
11 }

注意:malloc和free是对应的,当申请的空间不再使用后一定要free;free后要把指针初始化,以防野指针是出现。

2.函数操作原理

 malloc从哪里申请内存?是从操作系统中的堆中申请空间内存的,这和链表有些相似,系统返回的指针指向堆中的内存,系统把空闲的结点练成一个链表,也就是空闲链表,当malloc时,系统从空闲链表中遍历,找到所需空间的的堆结点,然后把此结点从空闲链表中删除,把此结点分配给程序,而free操作,则是把结点归还到空闲链表中,通过指针的作用,这里不多说,可以看一下静态链表中的操作,是通过游标实现的,原理差不多。堆操作完成,当不需要使用次内存时,一定要释放,同时需要对指针进行初始化。

堆的释放是由程序员自己释放的。

与堆相对的是栈

栈是由编译器自动分配释放,存放函数的参数值,局部变量的值的。

假设定义一个指针,此指针指向堆,也就是说内存在堆上,但这个指针地址在栈中存储卡所以即使栈已经被销毁了,但是那块内存人在那里,所以使用完后一定要free操作


暂时先说这么多,下次再补充free和malloc函数源代码及原理……