C++ 删除悬空指针时会发生什么情况?

C++ 删除悬空指针时会发生什么情况?,c++,C++,我听说这是一种未定义的行为 但实际上发生了什么 是撞车还是其他事情也可能发生 它是否可能进入无限循环>如果是,那么什么时候会发生这种情况?当您出于任何原因访问“悬挂指针”时,坏事情可能会发生,什么也不会发生,或者“东西”可能会发生。这完全取决于发生了什么。例如: int* intp = new int; *intp = 8; delete intp; std::cout << "intp: " << *intp << std::endl; int*intp=

我听说这是一种未定义的行为

但实际上发生了什么

是撞车还是其他事情也可能发生

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

当您出于任何原因访问“悬挂指针”时,坏事情可能会发生,什么也不会发生,或者“东西”可能会发生。这完全取决于发生了什么。例如:

int* intp = new int;
*intp = 8;
delete intp;
std::cout << "intp: " << *intp << std::endl;
int*intp=newint;
*intp=8;
删除intp;
当你以任何理由访问一个“悬空指针”时,坏事情可能会发生,什么也不会发生,或者“东西”可能会发生。这完全取决于发生了什么。例如:

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

std::cout之所以称之为“未定义”,是因为没有真正的方法来预测将发生什么

访问悬空指针可能会损坏内存(如果正在写入内容),也可能会导致程序崩溃,可能会出现边界错误,也可能会指向新对象,具体取决于删除对象后发生的情况

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
}

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

它被称为“未定义”,因为没有真正的方法来预测将发生什么

访问悬空指针可能会损坏内存(如果正在写入内容),也可能会导致程序崩溃,可能会出现边界错误,也可能会指向新对象,具体取决于删除对象后发生的情况

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
}

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

这在很大程度上取决于C运行时库和配置的特定实现(即gcc/msvc可能会有不同的行为,msvc的调试和发布堆会做不同的事情等等)。“实际上会发生什么?”,它没有定义,所以我们不知道。理论上它可以打开你的车库门。也许你的意思是针对特定的编译器/操作系统?这在很大程度上取决于C运行时库和配置的特定实现(即gcc/msvc可能会有不同的行为,调试和发布msvc堆会做不同的事情等等)。“实际会发生什么?”嗯,它是未定义的,所以我们不知道。理论上它可以打开你的车库门。也许您的意思是针对特定的编译器/操作系统?