我有以下代码:
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检查。
谢谢。 :)
更新:
现在我想起来了。我可以使用global b与:
b =新的A();
然后,main()上的delete b可以正确删除全局b。
*脸部*
最佳答案
因为b
内的x()
声明遮盖了全局声明;这是一个单独的变量。因此,在您的代码中,永远不会将全局b
分配给它,因此会发生内存泄漏。