首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于C的控制台应用程序在从cmd.exe运行时崩溃,在VS2008调试器中运行良好吗?

基于C的控制台应用程序在从cmd.exe运行时崩溃,在VS2008调试器中运行良好吗?
EN

Stack Overflow用户
提问于 2009-07-16 04:06:58
回答 1查看 1.8K关注 0票数 0

不知道这是怎么回事。

我有一个用C编写的应用程序,当我从VS2008内部运行它时,它运行得很好。如果我从cmd.exe提示符运行它,它就会崩溃,通常是在malloc()中。我猜这是由于CRT库不匹配而导致的种族状况。

这个应用程序很简单。

它调用WinHttp层向网站发送GET请求,然后快速回复。这个部分看起来很好,但是在WinHttpReadData之后,程序调用printf()打印接收到的数据,这就是malloc崩溃经常发生的地方。

但只能在调试器之外。?

我正在从命令行编译。

代码语言:javascript
复制
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一样)。

代码语言:javascript
复制
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. ,我认为通过链接静态(/MT),不会需要安装VC90运行时吗?
  4. ,我仍然不理解/NODEFAULTLIB。这有关系吗?

我习惯于制作文件和编译器,我知道C。我不知道C++,这就是我用C写的原因,但我不理解Windows上所有变幻莫测的CRT。有人能解开这个谜团吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-16 04:12:59

通常,当我在调试器中看到一些东西工作,但在其他地方,它是由于未初始化的内存。调试器“足够好”,可以为您清除内存,好像这是在帮您的忙。

第二种可能是缓冲区溢出,调试器导致您的错误的内存位置移动到足以避免它。考虑到您的失败是在malloc过程中出现的,我会怀疑这个问题;您可能正在破坏malloc链。

另一个突出的可能性是某种种族条件,调试器正在改变时间,让您可以逃脱它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1135337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档