我有以下代码:

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分配给它,因此会发生内存泄漏。

10-05 20:54
查看更多