1.忘记free啊
2.循环里使用了malloc,循环写死内存用光了啊
3.数组访问越界或指针非法访问啊
4.向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。
5.在函数中调用构造函数使用了new,却没有释放,虽然最终系统会进行回收,但还是会造成内存的泄露,应该使用析构函数进行释放的操作。 等等…
1.内存泄露
1.什么是内存泄露? 内存泄露是指程序中已动态分配的堆内存因为某种原因未释放或无法释放,造成内存空间的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
2.内存泄露的分类?
(1)常发性内存泄露:发生泄露的代码会被多次执行到
(2)偶发性内存泄露:发生泄露的代码在某些环境或操作下才会发生
(3)一次性内存泄露:只会被执行一次
(4)隐式内存泄露:程序在运行过程中不断分配内存,直达结束后才释放。严格来说这不算内存泄露,但是服务器运行时间很长,可能会耗尽所有内存
实例: 当运行下面的Test函数会有什么样的后果?
void GetMemory(char **p,int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str,100);
strcpy(