不知道這是怎麼回事。
我有用C編寫的Windows控制檯應用程序。當我從VS2008運行它時,它運行良好。如果我從cmd.exe提示符運行它,它通常在malloc()中崩潰。我猜測這是由於CRT庫不匹配造成的競爭條件。從cmd.exe運行時,基於C的控制檯應用程序崩潰,在VS2008調試器中運行良好?
該應用程序很簡單。
它調用WinHttp層向網站發送一個GET請求,然後清理回覆。這部分似乎工作正常,但在WinHttpReadData之後,程序調用printf()打印出接收到的數據,這就是malloc崩潰經常發生的地方。
但只有外部調試器。 ????
我正在從命令行編譯。
c:\vc9\bin\cl.exe /Zi /DEBUG -Ic:\vc9\Include
-IC:\WindowsSDK\v6.1\Include HttpGet.c
-link /debug /out:HttpGet.exe /SUBSYSTEM:CONSOLE /LIBPATH:c:\vc9\Lib
/LIBPATH:C:\WindowsSDK\v6.1\Lib WinHttp.lib
我看到上面的結果,如果我編譯/ MT,或什麼都沒有。如果我使用/ MD進行編譯,那麼它在調試器中運行時,在調用free()時掛起,並在cmd.exe中崩潰(與/ MT相同)。
run in result: /MT result: /MD
--------- ------------ -----------
VS2008 debugger runs fine hang in free() (at the end)
cmd.exe crash in malloc crash in malloc
"VC cmd prompt" crash or hang(spin) ??
一些問題 -
是因爲內VS2008提供的路徑的不同的行爲?
問題原因是我沒有在我的機器上安裝VC90運行時?
我認爲通過靜態鏈接(/ MT)我不需要安裝VC90運行時的需求?
我還是不明白/ NODEFAULTLIB。這是相關的嗎?
我用的makefile和編譯器,我知道C.我不知道C++這就是爲什麼我在寫C.但我不明白,在Windows上CRT的所有變化無常。有人能清除這個謎團嗎?
嗯,好的。好主意。我一直在做C#太長...... – Cheeso 2009-07-16 04:29:01