注册 登录
编程论坛 C++教室

c++ 动态内存分配

chenwh_bccn 发布于 2012-10-14 16:40, 637 次点击
程序代码:
void main()
{
    int  * p;

    p=new int(8);   
    cout <<*p<<endl;
//    delete p;

    p=new int (9);
    cout<<*p<<endl;
    delete p;
}


为什么我分配两次内存空间,最后只是回收了一次,但是编译器不报错说内存泄漏呢?
12 回复
#2
十字军东征2012-10-14 17:21
编译器对于内存泄露不会报错的,但内存泄漏的危害我们都懂得
#3
chenwh_bccn2012-10-14 18:01
回复 2楼 十字军东征
那请问上述程序有内存泄漏吗?
#4
wuchunbing2012-10-14 19:02
什么是内存泄露啊
#5
chenwh_bccn2012-10-14 19:22
回复 4楼 wuchunbing
就是你申请的内存空间没有回收,因为程序不会自动回收这部分内存的
#6
小糊涂神c302012-10-14 19:35
内存泄露编译器是不会给提示的!
#7
TonyDeng2012-10-14 21:02
回复 楼主 chenwh_bccn
你这个是有内存泄漏的,第一次分配的8字节空间没有回收,泄漏了。进程内存泄漏,后果与操作系统有关,Windows NT以上的操作系统能够在进程终止后把泄漏的内存完全卸掉,不会造成危害,但别的操作系统不知道——可以肯定的是DOS是最忌讳这种泄漏的(其实就算不泄漏用C的动态分配内存机制也很令人烦恼)。
#8
小糊涂神c302012-10-15 09:01
回复 7楼 TonyDeng
你所说的申请8个字节是错误的,是申请了4个字节,并给这个内存赋初始值为8!
#9
青春无限2012-10-15 09:26
学习
#10
zklhp2012-10-15 09:28
以下是引用小糊涂神c30在2012-10-14 19:35:50的发言:

内存泄露编译器是不会给提示的!

对 内存泄露得靠专门的工具来检测 虽然编译器也提供一些工具 但默认是不工作的罢
#11
风之子MIKEY2012-10-15 09:40
路过
#12
zhuanjia02012-10-15 22:43
分配两次只收回一次。应该收回第一次后再将p指向第二次申请的内存地址
#13
pangding2012-10-16 08:40
即使是先进的系统,在进程结束之前也不会回收已经泄漏的内存,所以不能指望系统。
另外大家都已经说得比较清楚了,内存泄漏不是编译时错误,编译器自然不会报错。
1