void f1(void)
{
int * p;
p = new int;
}
执行了F1函数后,p所分配到的内存地址就丢了。找不回那个int内存了,所以这里的内存泄露了!一般多是指内存分配未回收。Top
打个比方:内存就象一个旅馆,旅馆的每个房子都有编号并记录在案
客人来了,管理者根据这些编号的记录给客人分配房间,现在某个编号不小心弄丢了,不再被记录在案了,那么这个房间对于管理者来说就相当于不存在了,我们说这就发生了“房间泄漏”
再看J_John同志的例子,当调用函数f1()时,已分配了一块内存,并给了编号p,
现在函数调用结束了,这个编号却没有传出去,于是就发生内存泄漏
1.用 malloc 分配了,但没有用 free 释放。
2.用 new 分配了,但没有用 delete 删除。
3.用 GlobalAlloc 分配,但没有用 GlobalFree 释放。
4.用 new [] 分配的数组,没有用 delete[] 删除,而是用 delete 删除。
如:
struct A {
int num;
}
struct A* pa;
pa = new A[10];
delete pa; //应该用delete[] pa;
自己申请的内存一定要记着释放,否则就会造成内存泄漏
用多少放多少
当你申请了内存块时有忘记了指向内存的指针
在程序中若有一个指针指向了一块内存区域,后来由于某种原因(通常为程序员没有将其释放),而内存没有被释放,这时对于程序来说,那块内存区域已经不可用了。楼上那位朋友旅馆的比喻很形象。
803

被折叠的 条评论
为什么被折叠?



