在动态分配的内存单元(即由函数malloc()或ealloc()分配的内存单元)不再使用却没有被释放的情况下,会出现内存漏洞。未释放内存单元本身并不是一种错误,编译程序不会因此报告出错,程序也不会因此而立即崩溃。但是,如果不再使用而又没有被释放的内存单元越来越多,程序所能使用的内存空间就越来越小。最终,当程序试图要求分配内存时,就会发现已经没有可用的内存空间。这时,尤其是当程序员没有考虑到内存分配失败的可能性时,程序的运行就会出现异常现象。内存漏洞是最难检测的错误之一,同时也是最危险的错误。导致这个问题的编程错误很可能出现在程序的开始部分,但只有当程序奠名其妙地使用完内存后,这个问题才会暴露出来。此时去检查当前那条导致内存分配失败的语句是无济于事的,因为那些分配了内存却未能按时释放内存的代码可能在程序的其它地方。遗憾的是C语言并没有为检测或修复内存漏洞提供现成的方法。除非使用提供这种功能的商业软件包,否则,程序员就需要以很大的耐心和精力去检测和修复内存漏洞。最好的办法是在编写程序时就充分考虑到内存漏洞的可能性,并小心谨慎地处理这种可能性。导致内存漏洞的最简单的也是最常见的原因是忘记释放分配给临时缓冲区的内存空间,请看下述程序段:# include # include /** Say hello to the user's and put the user's name in UPPERCASE.*/void SayHi( char *name ){char * UpName;int a;UpName = malloc( strlen( name ) +1);/ * Allocate space for the name * /for( a =0; a