【问题标题】:Absurd values to main(int argc, char** argv)main(int argc, char** argv) 的荒谬值
【发布时间】:2011-11-30 15:58:24
【问题描述】:

我在旧的 C++ 项目中启动了一个控制台应用程序。
main(int argc, char** argv) 中的断点开始program.exe -debug
根据调试器,argc 变成了 32 并且 argv 中的字符串有奇怪的随机值。
继续执行时发生访问冲突,因为argv中的字符串指向无效值。

这是什么原因造成的?

【问题讨论】:

  • 你把main里面argc的值打印到stdout看是不是也报了32?

标签: windows msvcrt


【解决方案1】:

链接器设置了错误的入口点
对于普通的控制台应用程序,这应该是mainCRTStartup(调试器显示__tmainCRTStartup)。

有一个无效的入口点导致 main 查看堆栈中“发生”了什么。
发布这个,因为它并不容易找到。

【讨论】:

  • 感谢您跟进并发布这个神秘的知识。
  • 我怀疑。如果链接器没有找到__tmainCRTStartup,它会抱怨,但显然它没有找到并继续链接该项目。我怀疑char** argv 是导致崩溃的原因(不可写缓冲区)。试试char * argv[]
猜你喜欢
  • 2020-11-03
  • 2011-07-08
  • 2014-10-09
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2011-04-23
相关资源
最近更新 更多