malloc与free
如果你使用malloc来分配空间给某一变量,那你一定要知道malloc是在内存的堆区分配内存给该变量。堆区的空间相对于栈区等的空间要大的多,并且它是程序员可以自由使用并且一定要由程序员自己释放掉之前分配的但又无用的空间的区域。malloc 分配的空间就在这里,所有以在malloc后一定要有free与之对应。若你只是写了一个很简单的小程序,准备测试freei掉malloc的空间后的输出free变量的结果,你会发现居然不是空???是不是自己弄错勒(除非你释放的变量弄错了)?其实 不然,当你free变量的时候,只是将你那块独享的空间又“放回”原来的内存空闲列表中,当有其他程序申请堆空间的时候,这块你释放掉的空间又可以被申请使用了。所以,在你free的时候,下面要添加一条语句,valuename = NULL;后你再去试试结果吧。
(转:
下面讲一下malloc()和free()到底干了什么?
malloc()之后这片内存就是你的了,你就拥有使用权。
free()只是将你之前申请的内存块插入到heap中,并检测是否与heap中已有的内存块相邻,如若相邻,则合并这两块,至于你自己定义的指针,仍保持原值。但已经没有了空间,需要你自己手动将其指向NULL;
free并没有把内存里的值清零,内存里的值仍保持原样,free之后仍然可以通过你的
指针去访问内存,如果这片内存没有被操作系统挪做他用,那你访问到的还是原来得值,当然,你这样做很危险,尤其是在多线程环境下,你根本不知到这片内存是否被操作系统挪做他用了。
)