【发布时间】:2021-08-11 13:27:35
【问题描述】:
假设我已经分配了一些内存来存储这样的 int 值:
int *p=new int;
在这里,我使用new 运算符创建了所需的内存并分配了该内存块的地址,以便我可以访问该内存块。
现在,我可以控制我在该内存块中存储的内容。
但是当我写这样的语句时:
delete p;
我们说我删除了动态分配的内存。
但是如果我真的delete'd 或释放了那个内存,我应该在delete 操作之后不能再访问那个内存了吗?但是我能够使用相同的指针变量访问该内存块。那么如果删除内存块后可以访问,那么删除内存块的目的是什么?
这里有一些示例代码:
#include <iostream>
using namespace std;
int main(void)
{
int *p;
p=new int;
*p=10;
cout << *p << endl;
delete p;
//here look we can still access that block of memory using the same pointer variable
//But we did not created the memory block after deletetion
cout << *p << endl;
*p=20;
cout << *p << endl;
return 0;
}
在这种情况下,“删除/释放动态分配的内存”是什么意思?
【问题讨论】:
-
未定义的行为就是未定义的行为。
-
查看常见问题解答:stackoverflow.com/q/2397984
-
声明了int类型的指针,然后这个指针指向内存中新分配的整数位置。这个包含整数的内存位置是作为“新”关键字动态分配的。 'delete p' 语句不会删除指针本身,但会释放 'new' 分配的内存。现在指针 p 仍然存在,但现在不能保证它仍然指向相同的内存位置。它可能指向相同的地址或者不是未定义的行为。指针 p 现在是一个悬空指针。删除指针后的最佳实践将其分配给 nullptr。
-
为什么我们说你不能在篮球比赛中抢球并带球?我做到了,它奏效了
-
@StoryTeller 不确定这个类比是否有效——因为你没有机会打破其他玩家的鼻子;或者在你认为非常重要的一个小时后给球一个小刺,你会意识到这会引起问题
标签: c++ memory-management dynamic-memory-allocation undefined-behavior delete-operator