ASSERT(pdoc!=NULL)的用途

sdchenchen2012 2013-03-19 02:22:10
难道release下就不能使用吗?

如果不能使用,那么release下如何捕捉空指针

...全文
519 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-03-20
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
一叶之舟 2013-03-19
  • 打赏
  • 举报
回复
ASSERT是个宏,它的定义只在debug下有效,如果你想在release下使用,你就得定义下面的代码 #ifndef DEBUG ASSERT(b)\ if(!b) exit(0)\ #endif 加入这个定义后,在DEBUG下,原来的定义有效,在RELEASE下上面的定义就有效了。
sdchenchen2012 2013-03-19
  • 打赏
  • 举报
回复
引用 7 楼 whizer 的回复:
1)assert 是标准c提供的宏,用来测试给定的表达式.在release版本一般不能使用(因为release的makefile一般有-DNDEBUG选项,如果你非要用,修改makefile,删除这个选项) 2)至于你说的ASSERT是各个平台自己的封装,你可以查看宏定义.(应该也可以用makefile选项进行修改) 3)release情况下,你要判断是否为空,用if……
我看有的人代码里,基本用到指针,都 ASSERT(指针!=NULL); 判断了一下 所以才来问这个问题,因为你想,如果是relaase的话,自然不管用了,也就说,release下,不能判断空指针了
whizer 2013-03-19
  • 打赏
  • 举报
回复
1)assert 是标准c提供的宏,用来测试给定的表达式.在release版本一般不能使用(因为release的makefile一般有-DNDEBUG选项,如果你非要用,修改makefile,删除这个选项) 2)至于你说的ASSERT是各个平台自己的封装,你可以查看宏定义.(应该也可以用makefile选项进行修改) 3)release情况下,你要判断是否为空,用if,在if语句里,你想干什么干什么,(crash,打印信息...随你) 4)如果你不能确定该用assert还是if,建议你都用if.
sdchenchen2012 2013-03-19
  • 打赏
  • 举报
回复
sdchenchen2012 2013-03-19
  • 打赏
  • 举报
回复
引用 4 楼 Athenacle_ 的回复:
assert是为了测试“肯定不会发生”的事,仅在调试时使用。 如果某处得到一个NULL指针“很正常”,如malloc,那就一定要用if判断,不能用assert。
那些事肯定不会发生的? 还有你说的大写的,还是小写的宏?
Athenacle_ 2013-03-19
  • 打赏
  • 举报
回复
assert是为了测试“肯定不会发生”的事,仅在调试时使用。 如果某处得到一个NULL指针“很正常”,如malloc,那就一定要用if判断,不能用assert。
sdchenchen2012 2013-03-19
  • 打赏
  • 举报
回复
引用 1 楼 rocktyt2 的回复:
ASSERT是调试用的,这种空指针问题都应该在开发阶段就解决掉,release版本里应当不存在这种问题
第2个问题,如果真如你说,那么 比较合理的法子:检测空指针? 是否都是检测到后,都ASSERT ? 还是比较温柔的做法 if(==NULL) { } 不使用“断言”
sdchenchen2012 2013-03-19
  • 打赏
  • 举报
回复
引用 1 楼 rocktyt2 的回复:
ASSERT是调试用的,这种空指针问题都应该在开发阶段就解决掉,release版本里应当不存在这种问题
#ifdef NDEBUG assert(false); #endif 为什么这个宏在release下也不管用啊? 注意是小写。 这个宏是 标准c提供的 与微软平台无关
rocktyt 2013-03-19
  • 打赏
  • 举报
回复
ASSERT是调试用的,这种空指针问题都应该在开发阶段就解决掉,release版本里应当不存在这种问题

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧