野指针成效的调试

野指针效果的调试

#include<iostream>
#include<cstdlib>
using namespace std;

int main(void){
  char*p = new char[1];
  char*pp = (char*)malloc(1);
  cout<<"p="&p<<"  "<<"pp="<<&pp<<endl;
  cout<<"==========================="<<endl;
  delete p;
  free(pp);
  cout<<"p="&p<<"  "<<"pp="<<&pp<<endl;  
  cout<<"==========================="<<endl;
  p=NULL;
  pp=NULL;
  cout<<"p="&p<<"  "<<"pp="<<&pp<<endl;  
  
/*

  释放之后有可能变为野指针,所以特意调试了一下,结果得不到想要的
  已经释放了堆的内存空间,为什么地址还是与释放之前相同
  就算置为空之后打印的地址还是相同的
  是我理解对指针地址的理解有问题还是我代码的格式不对

  请指导一下,谢谢
*/
}
iostream delete null c

------解决方案--------------------
应该这样:

#include<iostream>
#include<cstdlib>
using namespace std;
 
int main(void){
  char*p = new char[1];
  char*pp = (char*)malloc(1);
  cout<<"p="<<(void*)p<<"  "<<"pp="<<(void*)pp<<endl;
  cout<<"==========================="<<endl;
  delete p;
  free(pp);
  cout<<"p="<<(void*)p<<"  "<<"pp="<<(void*)pp<<endl;  
  cout<<"==========================="<<endl;
  p=NULL;
  pp=NULL;
  cout<<"p="<<(void*)p<<"  "<<"pp="<<(void*)pp<<endl;  
}

&p与&pp是取p或pp本身的地址,这个肯定是不变的。
而p=NULL是将p指向空地址,但它本身的地址是不变的。