2009-04-10 108 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

通常,當試圖處理崩潰時,您的第一個端口應該是調試器。

正確使用,這將使您能夠將問題縮小到特定的代碼行,並希望在崩潰時給您一個運行時內存的視圖。這可以讓你看到墜機的直接原因。