c++ - 为什么我不能删除下面的指针?
问题描述
int main()
{
int x = 3;
int* y = new int(4);
y = &x;
cout << y;
delete y;
}
它显示以下错误:
'./a.out' 中的错误:free():无效指针:0x00007ffde8e1c0364
0x7ffde8e1c0364 中止
解决方案
y
无法删除,因为它指向行后自动存储的对象
y = &x;
new
只能删除返回的地址。如果 的操作数delete
具有其他值(例如自动对象的地址,如示例中所示),则程序的行为将是未定义的。
引用的赋值会覆盖之前的值,这是动态分配地址的唯一副本。这种地址丢失称为“内存泄漏”,因为无法再释放动态分配。
推荐阅读
- flutter - 如何使 BottomAppBar 粘在键盘顶部?扑
- reactjs - Codesandbox 在 React 中使用 Sass 编译错误
- mysql - 如何将转储文件 oracle 数据库导入 MySQL
- python - 在python中如何将数据集列拆分为多列
- git - `git status` 在每个文件之前打印太多空格
- python - 从 pyx 文件中的 cdef 函数获取 (CFUNCTYPE) def 函数的地址
- firebase - Firestore 安全规则 - 如果用户状态得到验证则允许
- json - 在物化视图中保存 jsonb_each 的输出
- azure - Azure 搜索索引中是否可以有多个唯一约束?
- reactjs - React Typescript:“JSX.IntrinsicElements”类型上不存在属性“any”