【发布时间】:2013-12-16 15:50:59
【问题描述】:
#include <iostream>
using namespace std;
int main()
{
int a = 10;
try
{
int *p = new int;
cout<<"p is pointing to address:"<<p<<endl;
cout<<"Value at *p:"<<*p<<endl;
p = &a;
cout<<"a address:"<<&a<<endl;
cout<<"p is pointing to address:"<<p<<endl;
cout<<"Value at *p:"<<*p<<endl;
delete p;
cout<<"a address:"<<&a<<endl;
cout<<"a val:"<<a<<endl;
}
catch(bad_alloc &e)
{
cout<<e.what()<<endl;
}
return 0;
}
在上面的例子中,p指向的地址变成了&a。通过调用delete,逻辑上p的所指对象(删除p指向的东西)因为p指向a的地址,现在a的地址应该被释放到堆中。
我很想知道, 1.new分配的内存会怎样?它会导致内存泄漏吗? 2. 即使这看起来很傻,(无论如何记录我的想法都没有坏处)编译器是否知道 p 指向的地址并删除 operator new 分配的确切地址?
【问题讨论】:
-
会导致内存泄漏吗?这是内存泄漏。
标签: c++ memory-management