【问题标题】:Why do I get an error deleting a dynamic pointer?为什么我在删除动态指针时会出错?
【发布时间】:2021-04-08 20:16:47
【问题描述】:

请不要过来说“只是读取错误”,它没有指定它,这就是我在这里问的原因。

int main()
{
    int* p, * q;
    int a = 10;
    p = new int;
    p = &a;
delete p;
}

【问题讨论】:

  • 打电话给delete时问问自己p指的是什么。
  • 您将堆栈分配变量的地址分配给 p。
  • 没有什么能比得上动态指针。这是动态分配的内存 p = new int; 但在下一行中,您将 p 指向堆栈上的内存。
  • p 不是一个动态指针,它指向一个自动(堆栈)变量。
  • 指针 需要删除是一个常见的误解,但它们不需要删除——它们指向的对象可能需要删除,但前提是它们是动态创建的。 (这很可能是由有经验的程序员谈论“删除指针”引起的,因为它比“删除指针指向的对象”要短,而且我们了解到该短语确实意味着其他。)

标签: c++ pointers dynamic new-operator delete-operator


【解决方案1】:
p = new int  

在这一行中,您将需要的内存动态分配给delete

p = &a

但是在这一行中,您并没有分配新内存,而是将p 指向堆栈内存,并泄漏了您之前分配的内存。

【讨论】:

  • 谢谢,但正如我所说,我能做些什么来解决它?或者如何删除?
  • @ekremturkoglu:你应该在p = &a之前delete p;
  • 你应该只谈论存储持续时间而不是堆栈和堆。具有动态存储持续时间的对象也可能位于堆栈上(放置新),因此需要删除。
猜你喜欢
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多