2009-04-10 109 views
1

我有一个MSVC 6.o工作区,它具有所有的C代码。
代码运行时没有任何优化开关,即选项O0,并且处于调试模式。 此代码从一些第三方获得。它照原样执行。奇怪的代码崩溃问题?

但是,当我在某些函数中添加一些printf语句来调试,然后执行代码时,它会崩溃。

我怀疑它是某种类型的内存页/内存段或类似的代码/数据溢出。但代码没有任何内存映射说明符或提及段/内存映射等的链接器命令文件。

如何缩小原因并修复这个古怪的问题?

回答

0

在printf中打印cstring对象时使用string.getbuffer。 宽字符和普通字符串可能存在问题。 printf(“%s”,str.Getbuffer()); str.ReleaseBuffer(); 干杯, Atul。

1

您可以尝试通过查看Visual Studio中的堆栈跟踪来确定发生崩溃的位置。你应该能够看到最终导致崩溃的函数调用的顺序是什么,这可能会给你一个提示错误的提示。

printf()也可能导致崩溃。一个可能的原因 - 但在Windows上不太可能 - 是一个太小的堆栈,正在被printf()调用溢出。

0

通常,当试图处理崩溃时,您的第一个端口应该是调试器。

正确使用,这将使您能够将问题缩小到特定的代码行,并希望在崩溃时给您一个运行时内存的视图。这可以让你看到坠机的直接原因。