【发布时间】: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