当前位置:C++技术网 > 资讯 > 函数内部分析:4 free函数内部执行过程分析

函数内部分析:4 free函数内部执行过程分析

更新时间:2015-06-23 20:00:06浏览次数:1+次

    free是C语言释放内存的函数,与malloc配套使用。free也是作为delete操作符的基础。free和malloc都是具备回滚机制的。也就是说,new和delete操作也是有回滚机制的,要么全部成功要么一个也不成功,不存在中间状态。
    delete中提到过,如果指针为空,不管对指针释放多少次都没有问题。同样,free也是执行这样的。但是,如果一个非空指针,释放一次内存成功后,即表示指向的内存已经回收。此时就不能再调用free或者delete释放了,这会导致多次释放内存,出现错误。在释放完内存后,应该将指针清空或者指向其他有效的位置,避免错误。而指针为空的多次释放没有问题是因为内部执行的指针是否为空的检测,如果为空直接返回,因此没有副作用。
    释放内存相比于分配内存来说容易的多。因为不存在内存不足的问题。正常释放内存不会出错,除非释放一个已经释放的内存。内存释放后,其他程序就可以占用了这块内存,自然那块内存也被保护起来了。你去释放它也就会触发系统的内存保护,自然就发生内存操作违规。有时候内存并没有被占用,也可能不会报错,这就看使用的编译器是否检测。一般的编译器都是可以检测得到的。内存访问错误非常常见,最好养成一个好习惯,今后也就免除很多Bug。