假设我通过 p1
进行动态内存分配,如下所示,
int* p1 = new int;
*p1 = 1;
我知道
p1
引用的内存可以通过使用来释放delete p1;
p1 = nullptr;
但是我想知道是否还有另一个指针
p2
指向 1
,我可以 delete
这个指针来释放内存吗?指针 p1
会发生什么?另外,p1
和p2
本质上是什么关系?例如,int* p1 = new int;
*p1 = 1;
int* p2 = p1;
// Can I delete p2 like this? And what would happen to p1?
delete p2;
p2 = nullptr;
最佳答案
您可以删除 p2
,但取消引用 p1
将导致未定义的行为,并可能导致段错误。
它是这样工作的:
p1
和 p2
都指向这个内存位置。 p2
被删除 - p1
仍然指向这个内存位置。没有泄漏,一切都很好 - 只是不要取消引用
p1
。你可以自由地做 p1 = nullptr
,但不能 *p1 = 1
。此外,你不能删除 p1
,因为它已经被删除了,你可能会发现段错误。 关于c++ - 关于 C++ 中的动态内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40830717/