正在加载图片...
处理不可重现错误(1/3) 处理不可重现错误(2/3) 癃目麦和選繪岩的恋韁箕着用对多 动态内存分配要小心 申请了内存空间后,必须检查是否分配成功。 >检查变量是否都初始化 凳類奥捺璿馥折N0让,的止 当程序出现不可理解的异常时,多半是某个地方有 内存越界 前面赋值a=5,后面却发现a的值不为5 选读:cC+ ory CorruptionAndMe 很可能是存储分配错误 oryLeaks ht char'msgoi char c[10]: return C: 1 的同学可以去了解下智能指针( Smart Pointer) for( p=head; p=NULL; p=p->next) free(p) throw exception0;∥此处抛出异常,s指向的内存释放了吗? c-1}=1 delete[s;∥不要写成 delete s; 处理不可重现错误(3/3) VC调试补充 使用函数时注意 C调试 不要使用还没有完全了解输入要求和输出 编写易于调试的VC代码 结果的函数MSDN、 Google) http:/idEv.csdnnet/developlaRticle/17/17148.s ·注意有多个参数类型相同的函数,比如 memset(used,-1, sizeof(used),后两个 ≯VC常用调试工具 参数容易写反 v Standar GDB调试补充 建议 用GDB调试程序 http://kaober.spaceslivecom/blog/cns55 多做笔记 多思考,减少对排错系统的依赖 BE9523CBEFD1DB! 158. entry ≯调试输出,日志帮助错误定位。尽量不要从第- 行代码开始跟踪 推荐几本书 《 Effective c++》 MSDN 《高质量cc++编程指南》处理不可重现错误(1/3) ¾ 检查日志和调试输出,确定大概出错位置,对多 线程以及长时间运行的服务器程序尤其有用。 ¾ 检查变量是否都初始化 ¾ 当程序出现不可理解的异常时,多半是某个地方有 内存越界 z 前面赋值 a=5,后面却发现a的值不为5 ¾ 很可能是存储分配错误 char* msg() { char c[10]; return c; } for( p=head; p!=NULL; p=p->next ) free(p); c[-1]=1; 处理不可重现错误(2/3) ¾ 动态内存分配要小心! z 申请了内存空间后,必须检查是否分配成功。 z 释放了内存空间后,应该把指向这块内存的指针指向NULL,防止 后面不小心使用了它,尤其对类的指针成员变量。 z 申请的空间必须释放,小心内存泄露。 z 讨论:C++里如何检测内存泄露? z 讨论:Java里怎么发生内存泄露? ¾ 选读:C/C++ Memory Corruption And Memory Leaks http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMe moryLeaks.html ¾ 有兴趣的同学可以去了解下智能指针(Smart Pointer ) z std::auto_ptr char* s = new char[10] ….. throw exception();//此处抛出异常, s指向的内存释放了吗? ….. delete [] s; //不要写成 delete s; 处理不可重现错误(3/3) ¾ 使用函数时注意 z 不要使用还没有完全了解输入要求和输出 结果的函数(MSDN、Google...) z 注意有多个参数类型相同的函数,比如 memset(used , -1, sizeof(used)),后两个 参数容易写反 VC调试补充 ¾ VC调试 ¾ 编写易于调试的VC代码 http://dev.csdn.net/Develop/article/17/17148.s htm ¾ VC常用调试工具 GDB调试补充 ¾ 用GDB调试程序 http://kaober.spaces.live.com/blog/cns!55 BE9523CBEFD1DB!158.entry 建议 ¾ 多实践 ¾ 多做笔记 ¾ 多思考,减少对排错系统的依赖 ¾ 调试输出,日志帮助错误定位。尽量不要从第一 行代码开始跟踪 ¾ 推荐几本书 z 《Effective C++》 z MSDN z 《高质量C/C++编程指南》 z Google
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有