如果我想删除指针并释放它使用的内存,这两段代码之间的区别是什么? (在C ++中)
1
delete p1;
p1=p1->next;
2
int* remove;
remove=p1;
p1=p1->next;
delete remove
我尝试了两个,代码1导致了内存问题,但我不知道为什么。
你能告诉我你“删除”一个指针后发生了什么吗?它是否会删除指针本身?或指针和它指向的东西?或者只是它指向的东西?
谢谢!
答案 0 :(得分:1)
您的第一个代码段具有未定义的行为,因为在第二行中您访问已删除的对象。你的第二个片段很好。它与第一个片段的作用相同,但避免使用UB。
顺便说一句:您的第二个代码段中的前两行应该是一行int* remove = p1;
。毕竟这是C ++,而不是超古老的C.在没有坚如磐石的理由的情况下,永远不要保留未初始化的变量。