我使用Visual C++來建立一些開源項目一個DLL,但是當我得到一個錯誤,上面寫着:文件路徑我的硬盤上沒有找到
如何做了「f:\ dd \ vctools \ crt_bld \ self_x86 \ crt \ src \ vsprintf.c」出來了嗎?我甚至沒有一個「f」磁盤。我搜索了我的源代碼,並且沒有這樣的字符串。
對此有何想法?
我使用Visual C++來建立一些開源項目一個DLL,但是當我得到一個錯誤,上面寫着:文件路徑我的硬盤上沒有找到
如何做了「f:\ dd \ vctools \ crt_bld \ self_x86 \ crt \ src \ vsprintf.c」出來了嗎?我甚至沒有一個「f」磁盤。我搜索了我的源代碼,並且沒有這樣的字符串。
對此有何想法?
@Dcoder所說的文件路徑不是來自您的磁盤。
此消息來自您與程序鏈接的CRT(C運行時庫)。 MSVCRT.DLL(或它的一個版本)
當微軟編寫他們的源代碼來創建這個庫時,他們在其中創建了一個名爲Assertions的特殊代碼。此代碼(鏈接到庫的調試版本時)會檢查發送給庫中函數的參數,並將有用的消息傳遞給您。
在這種情況下,您已經調用了一個函數,如printf
或sprintf
等,並且最終進入一個微軟函數中,該函數位於名爲vsprintf.c
的微軟文件中。
該文件在Microsoft內部編譯時,在F:驅動器INSIDE Microsoft上完成。它不在你的磁盤上。
編輯:如果您將代碼添加到您的問題中,我們可以幫助您找到發生的位置。
這是一個調試斷言失敗 - 你顯然通過一個NULL
值 - sprintf
家庭的功能。
您應該檢查您的源代碼是否有任何NULL
- 您傳遞給此功能的值。
我知道這是一個錯誤,但我的問題是'文件路徑',我沒有'f'磁盤 – 2013-04-27 06:55:55
這是安裝Common Run Time(CRT)框架的地方。 vsprintf.c是CRT的一部分,並且該DLL中的某個函數使用空格式字符串調用了sprintf()函數之一。
但我沒有'f'磁盤,更不用說'dd \ vctools'等等了 – 2013-04-27 06:56:50
沒有。這是微軟構建系統保存源代碼的地方。構建DLL時,'__FILE__'的值被燒入斷言中。 – 2013-04-27 07:09:41
正如其他人在評論中指出的那樣,斷言對話框中描述的路徑是拋出斷言的源文件的路徑。在這種情況下,CRT sprintf
函數拋出一個斷言。
'f:...'路徑並不是指自己機器上的路徑:它是機器上將源文件編譯爲CRT DLL的路徑。
當他們構建它時,文件名/ linenumber信息被微軟烘焙到CRT DLL中。它基於Microsoft工程師使用的文件路徑。 – DCoder 2013-04-27 06:57:32