我们常使用malloc函数申请内存空间,free函数来释放内存空间,所谓申请就是标记一块内存不可以再被其他逻辑使用,释放就是让被申请的内存可以再次被其他逻辑使用。
free函数只有一个参数,就是所要释放内存块的首地址。free函数的功能简而言之,就是斩断指针变量与内存块之间的关系。比如,malloc(P)分配内存块给指针P,我们访问这个内存块都要通过指针P,并且,这块内存不能再分配给其他指针;而free(P)就是断开这种关系,从此P和那块内存之间再无瓜葛,并且系统回收这块内存可再次分配给其他指针使用。
至于指针P保存的地址,并没有发生任何改变,但是它对这块内存已经没有所有权了。那块内存区域的值同样没有发生任何变化(考虑时间效应,未必),只是再也无法使用,这就是free函数的功能。
malloc函数与free函数必须配对使用,否则会造成内存泄露,或者直接出错。
记住,我们使用free(P)释放内存之后,务必对P赋值为NULL,否则指针就是“悬垂指针”(指向曾经存在的对象,但该对象已经不再存在了,此类指针称为悬垂指针。结果未定义,往往导致程序错误,而且难以检测。),这是很危险的漏洞,也是经常容易出错的地方。 |