说我有这个:
char* data = new char[3];
char* tmp = data;
data = new char[3];
之后我应该为这两个指针调用delete:
delete[] data;
delete[] tmp;
或仅用于数据:
delete[] data;
我尝试了第一种方法,但它给了我一个堆错误,第二种方式没有给我带来任何问题,但是然后内存tmp发生了什么指向,那里会有内存泄漏吗?
答案 0 :(得分:2)
了解delete
运算符释放由先前new
分配的所有内存非常重要。因此,根据new的出现,对同一分配内存的删除调用应匹配。
在您的情况下,分配给new
的{{1}},new char[3]
有两次调用,该调用已进一步分配给data
。此时,tmp
和tmp
都指向(指向)堆上相同的内存位置。第二次调用data
,new
进一步分配相当于3个字符存储的内存,并将其分配给new char[3]
。因此,在两个分配的块上调用data
两次,由delete
和tmp
单独引用是有意义的。