我有以下代码,我被问到这里是否有任何内存泄漏。我认为" 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)
此程序应该崩溃并会丢失内存。
崩溃,因为主要发布已在p
内发布的内存function
。
丢失内存,因为a
中分配的function
未被返回,并且位于function
的内部。
答案 1 :(得分:0)
基本上我认为对所发生的事情存在误解。
你是对的,它是一个传球指针。这意味着地址被压入被调用函数的堆栈(或放入寄存器,取决于调用约定)。堆栈(或寄存器)中的这个地址用于释放对象。最后,这个地址将被新操作员返回的地址覆盖。
所以 p 没有改变,因为它在调用者的堆栈中而不是在被调用者的堆栈中。