我在C ++的Visual Studio 2008中有一个代码,该代码仅与Fopen和Fclose一起使用。在调试模式下,一切正常。我已经使用了几个数据集进行了测试。但是它在发布模式下不起作用。它一直崩溃。我已经关闭了所有优化,也没有任何依赖性(在链接器中),我也设置了这些:

优化:禁用(/OD)保留无参考的数据。请勿删除Windows98的冗余优化:否

我仍然想知道在这种情况下它不应工作。我还应该关闭什么才能像在调试模式下一样工作?

我认为,如果它在发行模式下工作,但在调试模式下不起作用,则可能是一个编码错误,而另一种方式看起来很奇怪。不是吗?

感谢任何帮助。 - 尼玛

有帮助吗?

解决方案

调试模式通常初始化堆数据分配。该程序可能取决于此行为。寻找未初始化的变量和缓冲区。

其他提示

1)仔细检查所有取决于预处理器宏的所有代码。
2)使用assert()验证程序状态先决条件。不得期望这些影响程序流(即删除支票仍然允许代码提供相同的最终结果),因为断言是宏。当断言不做时,请使用常规的运行时间条件。
3)的确,切勿将变量留在非初始化状态。

到目前为止,最有可能的解释是在非初始化记忆引起的两种模式中的不确定行为不同。由于调试和发布之间的定时环境不同,因此缺乏线程安全性和同步代码的问题也可以表现出这种行为,但是如果您的程序未进行多线程阅读,那么显然这是不可能的。

我已经经历了这一点,就我的情况而言,是因为我的一个结构数组之一应该只有x索引,但是我的循环检查了该结构,该结构已超过检查x+1索引。有趣的是,调试模式运行良好,尽管我在Visual C ++ 2005上。

我花了几个小时将printf划入我的编码线上以捕捉错误。任何人都有很好的调试方法,请告诉我。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top