我有这样的代码:为什么这个全局堆对象没有被释放?
class A {
public:
int x;
};
A *b;
void x() {
A a;
A *b = new A();
// delete b; // works. free b.
}
int main() {
x();
delete b; //not. why ?
return 0;
}
为什么B只能X内被释放()?不是main()?我以为b是一个手动变量,而不是范围限制。 使用valgrind进行检查。
谢谢。 :)
更新:
现在我还记得。我可以使用全局b:
b = new A();
然后main()上的删除b可以正确删除全局b。
* 捂脸 *
这将删除全局b(NULL初始化),但不是您尝试删除的“b”变量。另见Angew的回答。 – SChepurin
是的。我注意到我可以做到:: b = new A();太。感谢您的意见。 :) – Aruman