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

在C++中 内存储器的动态使用(包含占用和释放)

2013-12-19 
在C++中 内存的动态使用(包含占用和释放)#include iostreamusing namespace stdint main() {int * p

在C++中 内存的动态使用(包含占用和释放)

#include <iostream>
using namespace std;

int main() {
int * p = new int(4);//定义一个整数型指针  使用函数new 分配一块整形内存空间 并且赋初始值 4
cout<<p<<endl;//输出 指针p里面的数据  是一个地址  类似于0x9f17008
cout<<*p<<endl;//输出指针P指向地址空间里面的数据  就是 初始值 :4
cout<<"*********************"<<endl;
   *p =7;
 cout<<p<<endl;
cout<<*p<<endl;
cout<<"**************"<<endl;
delete p;
cout<<"执行了指针p的内存空间释放"<<endl;
cout<<p<<endl;
cout<<"@@@@@@@@@@@@"<<endl;
p =NULL;
cout<<p<<endl;
cout<<"$$$$$$$$$$$$$$$"<<endl;
return 0;
}


输出结果
0x885b008
4
*********************
0x885b008
7
**************
执行了指针p的内存空间释放
0x885b008
@@@@@@@@@@@@
0
$$$$$$$$$$$$$$$

 

/××××××××××××××××××××××××/
以上程序的输出结果,说明我们在使用delete清除占用指针p的内存空间,p里面的数据并没有改变。

所以为了程序的严谨需要增加p =NULL;


[解决办法]
#define DEL(a)  {delete a; a = NULL;}

[解决办法]
#define DEL(a)  {delete a; a = NULL;}

记住检测a 是否空指针。

delete a;

可能是野指针,无从检测野指针。也无从检测是否已经释放。


delete a; a = NULL;

可以检测是否空指针,而且不会是野指针。

if(a==NULL)....
else {dosomting();}


有了这么点改进,所以还勉强算一个好的方法。

但是也不是一劳永逸的。

[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George

热点排行