我是否需要对分配给另一个指针的指针调用 delete

Do I need to call delete to a pointer assigned to another pointer?

本文关键字:指针 另一个 调用 delete 分配 是否      更新时间:2023-10-16

>假设我有这个:

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

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

delete[] data;
delete[] tmp;

还是仅用于数据:

delete[] data;

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

重要的是要了解 delete 运算符释放由上一个new分配的任何内存。因此,根据 new 的出现,对相同分配内存的删除调用应该匹配。

在您的情况下,有两个调用newnew char[3]分配给data进一步分配给tmp。此时,tmpdata 都引用(点(堆上的同一内存位置。第二次调用newnew char[3]进一步分配相当于3个字符存储的内存并将其分配给data。因此,在两个分配的块上调用delete两次是有意义的,由tmpdata单独引用。