这两个“指针删除”操作在c ++中有什么区别?

时间:2017-07-16 10:55:49

标签: c++

如果我想删除指针并释放它使用的内存,这两段代码之间的区别是什么? (在C ++中)

1

delete p1;
p1=p1->next;

2

int* remove;
remove=p1;
p1=p1->next;
delete remove

我尝试了两个,代码1导致了内存问题,但我不知道为什么。

你能告诉我你“删除”一个指针后发生了什么吗?它是否会删除指针本身?或指针和它指向的东西?或者只是它指向的东西?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的第一个代码段具有未定义的行为,因为在第二行中您访问已删除的对象。你的第二个片段很好。它与第一个片段的作用相同,但避免使用UB。

顺便说一句:您的第二个代码段中的前两行应该是一行int* remove = p1;。毕竟这是C ++,而不是超古老的C.在没有坚如磐石的理由的情况下,永远不要保留未初始化的变量。