【求原理】运行时报错,调试正常
编译和调试环境:vs2012 win7 32位系统
问题:
小弟最近写了一个程序,debug时发现了一个很有趣的现象:
如果用fwrite函数向一个文件强行写入比_Str指针申请的空间还要大的数据时,在调试状态下vs2012是允许这种行为的,也就是说不会报错。
但是如果直接运行的话,就会报错并强制退出。
请问为什么会出现这种情况呢?
百思不得其解,希望各位能帮忙解惑,感激不尽~
[解决办法]
人家没必要还另外花功夫检测你禁止的行为。碰巧能过就碰巧让你过了。
>难道说调试和运行两种状态翻译出的机器码不同吗?
编译结果当然不同
[解决办法]
调试时会碰巧正常,很有可能是你代码处于某种临界状态,调试的时候多多少少与直接运行会有时间上的差异,某些地方由于断点和单步操作会产生一定的延迟,恰好迈过临界区。