不知道什么会在这里。
我有一个窗台应用程序编写的。当我运行了它从内VS2008,它运行的罚款。如果我运行了它从cmd.exe 提示,它崩溃,通常在malloc().我猜测这是一场比赛的条件由于不匹配的CRT图书馆。

该程序简单。
它呼吁成的留层送到请求一个网站,然后吸食了答复。这一部分似乎工作的现,但是之后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

我看到以上结果如果我汇编与/公吨,或没有。如果我编译/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)    ?? 

一些问题

  1. 是的不同的行为,因为路径提供内VS2008?

  2. 可能的原因是,我没有VC90运行安装在我的机器?

  3. 我认为,通过联静态(/吨)我也不会要求的需要VC90运行时应安装?

  4. 我还是不明白/NODEFAULTLIB.是那个有关?

我是用于生成文件和编译器,我知道C.我不知道C++这就是为什么我写在C。但我不明白所有的变幻莫测的CRT。有人能澄清这个谜?

有帮助吗?

解决方案

通常当我看到一些工作在调试器,但在其他地方,这是由于初始化记忆。调试器"足够好的"清晰的记忆你,如果这是在帮你的忙

第二种可能性是一个缓冲区溢出和调试器造成的存储位置mallocs动足够避免它。我怀疑这个给你的失败正显示出在一malloc;你可能会破坏malloc链。

另一种可能性突出的是某种形式的竞争条件和程序改变时间足以让你摆脱它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top