不知道这是怎么回事。
我有用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