我听说这是未定义的行为。
但实际上会发生什么?
是崩溃还是其他事情也可能发生?
它是否可能进入无限循环>如果是这样,那么这是什么时候发生的?
答案 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
}
在此示例中,它的行为是随机的。它可能会崩溃,或者它可能指向另一个对象,具体取决于它所处的内存发生了什么。