我可以删除以前动态分配的内存,但使用不同的指针吗?

时间:2017-12-12 11:39:08

标签: c++ pointers linked-list dynamic-memory-allocation delete-operator

我正在用C ++制作链表的程序。为了实现这个概念,我创建了一个指针' start'全局,指向列表的第一个元素。

程序完成后,我尝试删除所有动态分配的内存,以防止内存泄漏,方法是使用start和另一个本地声明的指针访问连续的节点' p'。 在这里,我使用了指向相同正确地址的指针,但是这个指针不是用于内存分配的指针,而是像任何普通指针一样在本地声明。

我的问题是 - 是否可以使用指向同一位置的普通指针删除动态分配的内存?

2 个答案:

答案 0 :(得分:4)

是的,你可以。这是有效的:

int* p = new int;
int* q = p;
delete q;

使用new[]时的等价物:

int* p = new int[123];
int* q = p;
delete[] q;

用指针类型替换int*。之后是否将指针设置为nullptr还有争议。

答案 1 :(得分:1)

只要指针具有与new相同的类型和值 1 ,是的,您可以将其用作{ {1}}论证。

另外,如果您使用delete,请务必使用delete[]

1 限定符new[]const)无关紧要。请注意,您还可以使用指向具有虚析构函数的基类的指针。