指针在删除它并在c ++中再次分配新内存后是不是获得相同的内存地址?

Posted

技术标签:

【中文标题】指针在删除它并在c ++中再次分配新内存后是不是获得相同的内存地址?【英文标题】:Does a pointer get the same memory address after deleting it and allocating new memory again in c++?指针在删除它并在c ++中再次分配新内存后是否获得相同的内存地址? 【发布时间】:2016-07-11 15:45:15 【问题描述】:

这是我想澄清的事情。我有另一个显示链接的功能。调用该显示函数后,我的控制台上出现了一个垃圾值。 但是当我评论“删除临时”语句时它工作正常,我得到了预期的结果。请帮忙。谢谢。

void MyLinkedList::insertFirst(double data)
    MyLink *temp = new MyLink(data);
    temp->next = first;
    first = temp;
    delete temp;

【问题讨论】:

delete temp; 会处理先前使用new 分配的内存,因此一旦函数返回first 将指向未分配的内存。任何通过 first 指针访问数据的尝试都会导致 UB(未定义行为)。 @dxiv 感谢您的评论。 【参考方案1】:

删除操作符不是删除指针本身,而是删除它所指向的内存。

 MyLink *temp = new MyLink(data); //allocate space for a MyLink dataType
 first=tmp; //temp still points to the allocated space
 delete temp; //deallocate the memory space pointed by temp which is the same memory space pointed by first.

【讨论】:

以上是关于指针在删除它并在c ++中再次分配新内存后是不是获得相同的内存地址?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 动态内存分配与结构中的数组

在C语言中,如何给函数分配内存?

如果存储在指针映射中,是不是需要删除对象?

野指针与内存操作

如何将指针分配给函数中的新对象,而该对象在退出后不会消失[重复]

谁删除了在构造函数中有异常的“新”操作期间分配的内存?