假设我通过 p1
进行动态内存分配,如下所示,
int* p1 = new int;
*p1 = 1;
我知道 p1
引用的内存可以通过使用
delete p1;
p1 = nullptr;
但是我想知道是否有另一个指针p2
指向1
,我可以删除
这个指针以释放内存吗?指针 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/