首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

野指针成效的调试

2013-01-21 
野指针效果的调试#includeiostream#includecstdlibusing namespace stdint main(void){char*p new

野指针效果的调试


#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指向空地址,但它本身的地址是不变的。

热点排行