删除PTR C 后会发生什么
What happens after you delete a ptr C++
我尝试使用以下代码示例删除PTR:
int* data = new int(1);
int* p = NULL;
p = data;
*p = 3;
delete p;
// Prints 3
cout << *p << endl;
//Prints 3
cout << *data << endl;
最后两行代码打印3,我的问题是什么是 在
delete p
之后删除?根据它从 最后两行代码,似乎没有任何删除0.0 ~~
有人请向我解释。提前谢谢大家。
在使用delete
D之后,将指针删除该对象是导致不确定行为的原因。不要指望任何可预测的行为并避免这种行为。
在不同角度和不确定的行为中产生的悬挂指针上的一本非凡的读物:可以在其范围之外访问本地变量的内存?
标准未定义发生的情况。就C 而言,地址无效,不应使用。如果您无论如何都会使用它会发生什么是任何人的猜测。
实际上,该内存通常坐在那里,直到其他需要它。您所做的只是说:"我不再需要它了。"您仍然可以随后访问一段时间,导致您对代码的适用性做出非常糟糕的假设,但是可以随时回收和重新分配。
如果该过程需要内存的其他内容,也许它得到了data
指向的内容。在这种情况下,使用data
可能会损坏程序的另一部分。这是一个非常糟糕的场景,因为当与错误完全无关的事物崩溃时,很难追踪真正发生的事情。
如果另一个过程需要内存,则可能的基础系统将内存倒退并将其放在另一个过程中。在将内存给予另一个过程后,在现代PC上访问data
将是致命的。
相关文章:
- 对于没有功能的结构,"new (ptr) mystruct;"做什么?
- "[ptr, ptr+len) must be a valid range"是什么意思?
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这是什么意思 *ptr = len
- 删除PTR C 后会发生什么
- 在C++中,对象什么时候真正被销毁?delete(ptr)做什么
- C++中的大小释放:全局运算符delete的正确行为是什么(void*ptr,std::size_t size)
- 这个声明"int(*ptr[3])();"是什么意思?
- (PTR + n-1) & -n 这个表达式有什么作用?
- (ptr + i)->Func() 和 &ptr[i] 之间有什么区别吗?Func()
- 如果您使一个char*ptr存储整数变量的地址,会发生什么
- 当使用运算符 new 更改为其他内存的指向已分配内存的 ptr 时会发生什么
- *ptr 和 * ptr 有什么区别
- (ptr语言 - A[0]) / (sizeof(A[0]) / sizeof(A[0][0]))的类型是什么?< /
- 这个语句表示什么[func ptr]
- 使用auto_ptr时,*ptr 和 *ptr.get() 有什么区别
- 在链表中设置head等于Node* ptr意味着什么?
- "(void)!ptr"做什么?
- 'Bad Ptr'在视觉C++中是什么意思?
- 这"int logprintf( const char* ptr, ... )"做什么?