c语言内存泄漏
内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。当我们长时间使用计算机或者手机时会出现卡顿延迟等现象,这时只要重启一下设备,就不会再卡顿,这就是由于内存泄漏导致的。因为当某些软件程序或系统出现内存泄漏会导致设备的内存无法释放,无法释放导致无法使用这些未被释放的内存,然而我们运行的其他程序只能使用没有分配的内存而出现卡顿。假设2G内存能开8个程序,但由于某个程序因内存泄漏导致1G没有释放,所以其他程序只能用剩下的1G,而重启会结束所有程序包括内存泄漏的程序,从而释放了内存就不会卡顿。
c语言中申请内存方式主要有malloc,calloc以及realloc(需要头文件<stdlib.h>),释放内存则需要free。(查看内存是否泄漏需要头文件<vld.h>)下面是使用方法:
这是用malloc申请内存,但没有释放内存
#include <stdlib.h>
#include <stdio.h>
int main()
{
int *p =(int*) malloc(20);
return 0;
}
在Visual C++的”输出(Output)”窗口得到:
这就是内存泄漏后得到的调试。
为了防止泄漏因此要free,保证内存使用完后释放。代码如下:
#include <vld.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int *p =(int*) malloc(20);
free(p);
return 0;
}
如果当前程序没有内存泄露会有“No memory leaks detected.”如下图:
calloc是定义动态内存时把所有值赋值为0。
而realloc是动态内存不够时增加动态内存。
calloc和realloc其他使用方法和malloc一样。