其他
2015-08-10 17:40
267 查看
free和delete一个指针
free(p)或delete(p)它们只是把指针所指的内存给释
放掉,但并不能把指针本身删除掉。之后一定要有p=NULL,不然p的指向是不确定的,会成为野指针。
你接下来通过if(p != NULL)来判断是不起作用的,即if语句对野指针是不起作用的。
动态内存会自动释放吗?
(1)指针消亡了,并不表示它所指的内存会被自动释放。
(2)内存被释放了,并不表示指针会消亡或者成了NULL 指针。
关于malloc/free 和 new/delete的区别
这两个组合最好是配对使用.
当内存耗尽之后,malloc和new失败怎么办?如何判断?
1.判断指针是否为NULL,如果是则用return语句马上终止本函数.
2.判断指针是否为NULL,如果是则马上用exit(1)终止整个程序的运行.
new也能适应于构造函数的重载
必须养成“使用调试器逐步跟踪程序”的习惯,只有这样才能在出现问题时找到根本原因.
参考:高质量C/C++编程
free(p)或delete(p)它们只是把指针所指的内存给释
放掉,但并不能把指针本身删除掉。之后一定要有p=NULL,不然p的指向是不确定的,会成为野指针。
你接下来通过if(p != NULL)来判断是不起作用的,即if语句对野指针是不起作用的。
int main() { char *p = (char*) malloc(100); strcpy(p, "hello"); free(p); p=NULL; /*假设中间有很多代码*/ if(p!=NULL) { cout<<"p!=NULL"<<endl; strcpy(p, "world"); cout<<p<<endl; } return 0; }
动态内存会自动释放吗?
void Func(void) { char *p = (char *) malloc(100); // 动态内存会自动释放吗? }需要明确:
(1)指针消亡了,并不表示它所指的内存会被自动释放。
(2)内存被释放了,并不表示指针会消亡或者成了NULL 指针。
关于malloc/free 和 new/delete的区别
class Obj { public: Obj(void) { cout<<"构造"<<endl; } ~Obj(void) { cout<<"析构"<<endl; } void Initialize(void) { cout<<"Initialization"<<endl; } void Destroy(void) { cout<<"Destroy"<<endl; } }; int main() { Obj *a = (Obj*)malloc(sizeof(Obj));//不会自动执行构造函数 a->Initialize(); a->Destroy(); free(a);//不会自动执行析构函数 Obj *b = new Obj; //自动执行不带参数的构造函数(若没有就执行默认构造函数) delete b; //自动执行析构函数(若没有就执行默认构造函数) return 0; }
这两个组合最好是配对使用.
当内存耗尽之后,malloc和new失败怎么办?如何判断?
1.判断指针是否为NULL,如果是则用return语句马上终止本函数.
void Fun(void) { A* a = new (A); if(NULL==A) { return; } }
2.判断指针是否为NULL,如果是则马上用exit(1)终止整个程序的运行.
void Fun(void) { A* a = new (A); if(NULL==A) { cout<<"Memory Exhausted"<<endl; exit(1); } }
new也能适应于构造函数的重载
class Obj { public: Obj(void){cout<<"Obj(void)"<<endl; } Obj(int x){cout<<"Obj(int x)"<<endl; } }; int main(void) { Obj *a = new Obj; Obj *b = new Obj(1); delete a; delete b; }
必须养成“使用调试器逐步跟踪程序”的习惯,只有这样才能在出现问题时找到根本原因.
参考:高质量C/C++编程
相关文章推荐
- IOS中输入框被软键盘遮挡的解决办法
- 重构与模式--简化
- 《反project核心原则》说明
- [Unity3D]Unity3D发展偷看游戏初期阶段NGUI
- Android处子Demo—简易的UC首页动画
- c语言计算器
- 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
- PHP开发者应了解的24个库
- 切了几道水题复习
- Android 高仿微信头像截取 打造不一样的自定义控件
- Linux system log avahi-daemon[3733]: Invalid query packet
- PYTHON-mysql fetchall和 fetchone之间的区别
- iOS7下 UISearchBar设置ReturnKeyType
- 文章标题
- 【Android进阶篇】自定义应用权限
- POJ 2031 && ZOJ 1718--Building a Space Station【最小生成树 && kurskal && 水题】
- CSS代码压缩/格式化工具
- ORM武器:NHibernate(三)五个步骤+简单对象CRUD+HQL
- 性能测试工具curl-loader(linux)
- mongodb 3.0下载安装、配置及mongodb最新特性、基本命令教程详细介绍