Malloc tutorial
一些常见的动态内存错误:
1.对NULL指针解引用
2.对动态开辟空间进行越界访问
3.非动态开辟空间使用free进行释放
4.在使用free释放一块动态开辟的空间只释放了部分
5.一块空间多次释放
6.忘记释放—->内存泄露
什么是内存泄露??
指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
python中就没有此类问题,因为python自带垃圾回收机制。
C/C++中主要有两种内存泄露:
堆内存泄漏(Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak.
系统资源泄露(Resource Leak).主要指程序使用系统分配的资源比如 Bitmap,handle ,SOCKET等没有使用相应的函数释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定。
C/C++中如何检测内存泄露?
使用一些软件测试工具进行检测
最直接的方式还是打开windows下的任务管理器查看“内存使用”和”虚拟内存大小”进行检测。
总之,在使用动态内存申请时还是要相当谨慎,使用完记得要及时free。
https://danluu.com/malloc-tutorial/