2013-04-27 69 views
1

我使用Visual C++來建立一些開源項目一個DLL,但是當我得到一個錯誤,上面寫着:文件路徑我的硬盤上沒有找到

enter image description here

如何做了「f:\ dd \ vctools \ crt_bld \ self_x86 \ crt \ src \ vsprintf.c」出來了嗎?我甚至沒有一個「f」磁盤。我搜索了我的源代碼,並且沒有這樣的字符串。

對此有何想法?

+1

當他們構建它時,文件名/ linenumber信息被微軟烘焙到CRT DLL中。它基於Microsoft工程師使用的文件路徑。 – DCoder 2013-04-27 06:57:32

回答

2

@Dcoder所說的文件路徑不是來自您的磁盤。

此消息來自您與程序鏈接的CRT(C運行時庫)。 MSVCRT.DLL(或它的一個版本)

當微軟編寫他們的源代碼來創建這個庫時,他們在其中創建了一個名爲Assertions的特殊代碼。此代碼(鏈接到庫的調試版本時)會檢查發送給庫中函數的參數,並將有用的消息傳遞給您。

在這種情況下,您已經調用了一個函數,如printfsprintf等,並且最終進入一個微軟函數中,該函數位於名爲vsprintf.c的微軟文件中。

該文件在Microsoft內部編譯時,在F:驅動器INSIDE Microsoft上完成。它不在你的磁盤上。

編輯:如果您將代碼添加到您的問題中,我們可以幫助您找到發生的位置。

0

這是一個調試斷言失敗 - 你顯然通過一個NULL值 - sprintf家庭的功能。
您應該檢查您的源代碼是否有任何NULL - 您傳遞給此功能的值。

+0

我知道這是一個錯誤,但我的問題是'文件路徑',我沒有'f'磁盤 – 2013-04-27 06:55:55

-1

這是安裝Common Run Time(CRT)框架的地方。 vsprintf.c是CRT的一部分,並且該DLL中的某個函數使用空格式字符串調用了sprintf()函數之一。

+0

但我沒有'f'磁盤,更不用說'dd \ vctools'等等了 – 2013-04-27 06:56:50

+0

沒有。這是微軟構建系統保存源代碼的地方。構建DLL時,'__FILE__'的值被燒入斷言中。 – 2013-04-27 07:09:41

1

正如其他人在評論中指出的那樣,斷言對話框中描述的路徑是拋出斷言的源文件的路徑。在這種情況下,CRT sprintf函數拋出一個斷言。

'f:...'路徑並不是指自己機器上的路徑:它是機器上將源文件編譯爲CRT DLL的路徑。

相關問題