删除悬空指针时会发生什么?

时间:2015-12-03 16:35:21

标签: c++

我听说这是未定义的行为。

但实际上会发生什么?

是崩溃还是其他事情也可能发生?

它是否可能进入无限循环>如果是这样,那么这是什么时候发生的?

2 个答案:

答案 0 :(得分:2)

当您访问"悬空指针"无论出于什么原因,可能会发生不好的事情,什么都不会发生,或者"东西"可以发生。这一切都取决于发生了什么。例如:

int* intp = new int;
*intp = 8;
delete intp;
std::cout << "intp: " << *intp << std::endl;

这可能会打印8,它可能会打印一些随机数,或者可能会崩溃。这一切都取决于自删除以来内存发生了什么。

这就是它被称为未定义行为的原因。知道将会发生什么是零方式。

答案 1 :(得分:0)

它被称为“未定义”&#39;由于没有真正的方法来预测会发生什么。

访问悬空指针可能会破坏内存,如果您正在写入某些内容,它可能会使程序崩溃,您可能会遇到边界错误,或者它可能指向一个新对象,具体取决于它发生了什么因为你删除了它。

void main(){
char *dp = NULL;

   try{
   char c;
   dp = &c;
   }
   catch(...){
   printf("ex thrown");
   }
 /* c falls out of scope */
 /* dp is 'now' a dangling pointer */
  delete &dp; // deleting a dangling pointer
}

在此示例中,它的行为是随机的。它可能会崩溃,或者它可能指向另一个对象,具体取决于它所处的内存发生了什么。