内存泄漏发现

时间:2017-04-15 18:44:20

标签: c++ pointers memory-leaks

我有以下代码,我被问到这里是否有任何内存泄漏。我认为" 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;
}

2 个答案:

答案 0 :(得分:1)

此程序应该崩溃会丢失内存。

崩溃,因为主要发布已在p内发布的内存function

丢失内存,因为a中分配的function未被返回,并且位于function的内部。

答案 1 :(得分:0)

基本上我认为对所发生的事情存在误解。

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

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