c++ - 关于C++中的动态内存分配

标签 c++ pointers dynamic-allocation

假设我通过 p1 进行动态内存分配,如下所示,

int* p1 = new int;
*p1 = 1;

我知道 p1 引用的内存可以通过使用

释放
delete p1;
p1 = nullptr;

但是我想知道是否有另一个指针p2指向1,我可以删除这个指针以释放内存吗?指针 p1 会发生什么?另外,p1p2本质上是什么关系?例如,

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 会导致未定义的行为,并可能出现段错误。

它是这样工作的:

  1. 内存分配在某个地址。
  2. p1p2 都指向这个内存位置。
  3. 一旦 p2 被删除 - p1 仍然指向这个内存位置。 没有泄漏,一切正常 - 只是不要取消引用 p1。您可以自由地执行 p1 = nullptr,但不能 *p1 = 1。此外,您不能删除 p1,因为它已被删除,您可能会遇到段错误。

关于c++ - 关于C++中的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40830717/

相关文章:

c++ - 为 float 组动态分配内存

c++ - 返回 'this' 指针的宏,当它不可用时返回 NULL

c++ - valgrind 中的 helgrind 提示简单的互斥锁

c++ - 我必须为我的 C++ 类字段使用指针吗?

c - C 中的指针未按预期工作

c - 指向动态指针数组的指针指向指向字符串的动态指针数组

c++ - 动态结构错误,指针转换

c++ - Alglib 与 Cuda

c++ - cl.exe 和 ml.exe 的问题

c++ - 包含二维数组的类的运算符重载