内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件引起的。
比如以下程序就有一个内存泄漏
main()
{
int *a;
int c=1;
a=(int*)malloc(sizeof(int));
a=&c; //分配给a的4个字节的空间没有办法回收了
return 0;
}
当这段程序运行完后就会造成4个字节的内存空间泄漏(在int为32位时),因为开始a分配了int的空间,然后又让a指向c,则刚开始分配的空间无法得到地址,也就无法用free来释放。
如果对于一个长期运行的程序,内存泄漏可能会造成可用内存空间不断减少,最终因内存不足而当机。
对于小的程序,只要程序结束以后整个程序占用的空间也就由操作系统自动释放了,不过在编程时还是要注意对于动态分配内存的管理,养成良好的习惯。
在JAVA中有垃圾回收机制,可以把无法调用的空间自动回收,因此JAVA程序没有内存泄漏的问题。