我是否需要将delete调用到指定给另一个指针的指针?

时间:2016-07-19 04:15:55

标签: c++ pointers

说我有这个:

char* data = new char[3];
char* tmp = data;
data = new char[3];

之后我应该为这两个指针调用delete:

delete[] data;
delete[] tmp;

或仅用于数据:

delete[] data;

我尝试了第一种方法,但它给了我一个堆错误,第二种方式没有给我带来任何问题,但是然后内存tmp发生了什么指向,那里会有内存泄漏吗?

1 个答案:

答案 0 :(得分:2)

了解delete运算符释放由先前new分配的所有内存非常重要。因此,根据new的出现,对同一分配内存的删除调用应匹配。

在您的情况下,分配给new的{​​{1}},new char[3]有两次调用,该调用已进一步分配给data。此时,tmptmp都指向(指向)堆上相同的内存位置。第二次调用datanew进一步分配相当于3个字符存储的内存,并将其分配给new char[3]。因此,在两个分配的块上调用data两次,由deletetmp单独引用是有意义的。

相关问题