簡體   English   中英

Windows 8.1項目的Windows 10 Visual Studio 2013生成錯誤

[英]Windows 10 Visual Studio 2013 build error for Windows 8.1 project

我在使用VS2013在Windows 10上構建win8.1項目時收到錯誤

'RAIG3D.Windows.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Symbols loaded.
Debug Assertion Failed!

Program: ...win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.Windows.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
Line: 1424

Expression: _pFirstBlock == pHead

我在鏈接到該項目的.dll使用winsock2.h 它是一個試圖編寫的自定義網絡庫。 它在windows分支上

https://github.com/damorton/libsocket/tree/windows

該庫適用於win32調試程序,但適用於win8.1,給出上述錯誤

這不是構建錯誤,而是運行時錯誤。 具體來說,一個斷言已經被觸發。 這是該消息告訴您的內容:

調試斷言失敗!

剛剛執行的一段代碼使用了assert宏的某些變體來捕獲可能的錯誤。 它抓住了一個。 很好 更妙的是,它會告訴你哪里是斷言宏被解雇:

程序:... win8.1-universal \\ Debug \\ RAIG3D.Windows \\ AppX \\ RAIG3D.Windows.exe
文件:f:\\ dd \\ vctools \\ crt \\ crtw32 \\ misc \\ dbgheap.c
線:1424

那是您的程序,而不是您的代碼文件。 因此,這不是您編寫的斷言,而是Microsoft開發人員在其C運行時庫例程中添加的斷言。 具體地說,在dbgheap.c文件中,這表明它與調試堆有關,該調試堆用於在調試版本中分配內存。

該消息還告訴您表達式的內容原來是錯誤的,因此觸發了斷言:

表達式:_pFirstBlock == pHead

看起來兩個應該相等的指針實際上並不相等。

如果您按了彈出的消息框中的“重試”按鈕,則可以使用調試器插入代碼,並在上下文中查看有問題的代碼行。 您還需要查看完整的調用堆棧。

調用堆棧將是有益的,看看你的代碼的行正在執行你叫庫代碼觸發此斷言之前。 此斷言是CRT作者放入其內存分配例程中的內部一致性檢查。 如果觸發它,則說明您的應用程序內部存在嚴重錯誤。

如果我想冒險,而沒有比我更多的可用信息,我想您可能正在嘗試混合引用不同版本的CRT的可執行文件和庫。 這不受支持,並可能導致嚴重的問題。 不同版本的CRT具有不同的對象大小,內存布局,靜態變量等。這次您很幸運,它被一個斷言捕獲。 檢查所有項目是否都針對相同版本的CRT,包括那些生成DLL和LIB的項目。 從頭開始全面重建,以確保它們都已更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM