2017-07-16 39 views
-4

如果我想删除一个指针并释放它使用的内存,这两段代码有什么区别? (在C++)在C++中这两个“指针删除”操作有什么区别?

1.

delete p1; 
p1=p1->next; 

2.

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

我都尝试两所1导致记忆问题,但我不知道为什么。

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

谢谢!

+0

没有区别,因为你写他们。两者都有不确定的行为,只是出于不同的原因。 – StoryTeller

+0

'delete remove;'是未定义的行为,以及'p1 = p1-> next;'是。 – user0042

+0

该死的我是这个网站的新手。应该有“删除= P1”。 –

回答

1

你的第一个片段有未定义的行为,因为在第二行中你访问一个已经被删除的对象。你的第二个片段很好。它和第一个片段一样但避免了UB。

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