int main()
{
int x = 3;
int* y = new int(4);
y = &x;
cout << y;
delete y;
}
Run Code Online (Sandbox Code Playgroud)
它显示以下错误:
'./a.out'中的错误:free():无效的指针:0x00007ffde8e1c0364
0x7ffde8e1c0364已中止
y 无法删除,因为它指向行后自动存储的对象
y = &x;
Run Code Online (Sandbox Code Playgroud)
仅返回的地址new可以删除。如果的操作数delete具有其他值(如示例中的自动对象的地址),则程序的行为将不确定。
带引号的分配将覆盖先前的值,该值是动态分配地址的唯一副本。地址的这种丢失称为“内存泄漏”,因为无法再释放动态分配。
delete销毁先前由分配new但未x由分配的对象new。您的代码与:
int x=3;
delete &x;
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |