2008-12-23 44 views
5

我只有1行代碼,並且是這樣的:爲什麼我用這行代碼得到緩衝區溢出錯誤?

pcrecpp::RE re("abc"); 

函數OnBnClickedButtonGo()內部。此功能在發佈模式下失敗,但在調試模式下可以正常工作。

(我使用Visual Studio 8的Windows XP。)

的錯誤信息是:

A buffer overrun has occurred in testregex.exe which has corrupted the program's 
internal state. Press Break to debug the program or Continue to terminate 
the program. 
For more details please see Help topic 'How to debug Buffer Overrun Issues'. 

我懷疑這是它的析構函數,它是無形的,暗示......但我不真的不知道。 PS:我靜態鏈接到PCRE lib版本7.8。 PS2:不太相關,但可能會幫助一些連接到PCRE庫時遇到問題的人(需要數小時才能完成):包括行#define PCRE_STATIC

+0

你建立了圖書館,還是它是一個罐頭庫?無論哪種方式,它是用相同的編譯器編譯的嗎?如果沒有,我會試着用你的編譯器來構建這個庫,看看是否有幫助。 – 2008-12-24 00:43:33

回答

0

如果它僅在發佈模式下發生,則有可能某些內容正在被「優化」。嘗試做更多的事情不僅僅是一個班輪,比如Match(),甚至可能打印出比賽。

3

我在我的情況下有相同的錯誤信息。在調試中,一切正常,但在發佈中,我收到了錯誤消息。我有一個本地C/C++庫,如native.dll。我創建了一個混合的非託管/託管C++庫,該庫是.net庫的包裝器。某處在這個mixed.dll我有一個非託管函數簽名的聲明,如:

typedef void (*FunctionOnStartSend)(); 

這樣做的我得到的消息,但如果我添加了一個「魔語」有話就沒有錯誤消息:

typedef void (__stdcall *FunctionOnStartSend)(); 
+0

明智的答案,男人! – LmTinyToon 2016-10-20 11:58:09

0

這是我的新的歷史: 大約一個月前,我已經得到了VS2008的一個奇怪的鏈接失敗,那一天我挖,設置_SECURE_SCL = 0可以幫助(見link text)。它幫助。那一天它幫助我,我只是將這個設置傳播給我們在團隊中建立的所有庫 - 這是因爲MS說,使用不同的_SECURE_SCL構建的兩個庫是不可兼容的。

時間過去了,三天前我有一個錯誤,當VS2008說我們在第一篇文章中看到的錯誤信息。並且調試器沒有任何幫助,因爲它只在Release版本中超載。我已經用了將近兩天的時間來處理libs的代碼,並且溢出漏洞在線路上存在漏洞。最後,我開始逐行檢查構建設置,並在此設置中計算出差異!

爲什麼哦,爲什麼微軟不能在動態加載器代碼中嵌入一些小的檢查來測試當前正在運行的庫和將要動態加載的庫是否爲不可譯?!一些代碼可以節省人們的時間。胡說!

相關問題