2017-04-15 193 views
0

我有以下代码,并询问是否有任何内存泄漏。我相信“function”里面有内存泄漏,因为在a = new A()之后没有删除操作。 。我对吗?内存泄漏点

class A 
{ 
public: 
    A(){}; 
    ~A(){}; 
private: 
    double d[10]; 
}; 

void function (A* a) 
{ 
    delete a; 
    a = new A(); 
} 

void main (void) 
{ 
    A* p = new A(); 
    function(p); 
    delete p; 
} 
+0

是的你是对的。 –

+1

它比仅仅有一个内存泄漏更糟......你也是在函数(A * a)和main()中一次删除A ...的第一次分配。 – aSteve

+0

还有一个双重删除,因为'p'被删除两次,一次在'function'中,一次在'main'中。 –

回答

1

这个程序应该崩溃失去记忆。

因为主释放内存p而崩溃,这已经在function内部发布。

失去内存,因为在function中分配的a未被返回,并且在内部为function

0

基本上我认为会有什么误解。

你是对的,它是一个传递指针。这意味着该地址被压入被调用函数的堆栈(或放入一个寄存器,取决于调用约定)。堆栈(或寄存器)中的这个地址用于释放对象。最后,这个地址将被新操作员返回的地址覆盖。

所以p没有改变,因为它在不在被调用者的调用者堆栈中。

+0

感谢您的解释。我怎样才能解决这个问题?我应该使用智能指针还是引用来避免内存泄漏? – Billyx24