【问题标题】:C code won't run on windows (Visual Studio 2013)C 代码不会在 Windows 上运行 (Visual Studio 2013)
【发布时间】:2014-04-15 21:28:35
【问题描述】:

我的程序在 GCC 上运行的 Linux 上运行良好,但是当我使用 Visual Studio 2013 在 Windows 上编译和运行代码时,它给了我这个错误:a3a3.exe 中 0x00EC2527 处的未处理异常:0xC00000FD:堆栈溢出(参数:0x00000000 , 0x00692000)。

它还在 crtexe.c 的第 626 行插入断点;以下是第 624 - 626 行供参考:

#else  /* WPRFLAG */
            __initenv = envp;
            mainret = main(argc, argv, envp);

在使用 Visual Studio 2013 之前,我已经编译并运行了 C 程序,但这个程序似乎不想工作,我终生无法确定原因。非常感谢您的帮助,我对编程很陌生,这是我在 stackoverflow 上的第一篇文章。我也很感激任何额外的提示或批评来帮助我学习。谢谢。

这是我的程序:http://pastebin.com/X731mU7W

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您可以尝试将代码减少到相关部分,然后将这些包含在您的问题中,那就太好了。应避免仅链接到代码。在修剪代码时,您甚至可能会发现问题的原因! :)
  • @lethal-guitar 感谢您的指点。我只包含了整个代码,因为我不知道代码的哪个区域受到了影响。
  • 我承认,当您的程序在main 之前崩溃时,很难缩小代码范围。这通常强烈表明您正试图将一些巨大的东西压入 main 堆栈,或者您正试图分配一些太大的全局数据。

标签: c visual-studio


【解决方案1】:

struct CR CRArray[14500] 太大而不能存在于堆栈中(因此堆栈溢出)。而是动态分配它。

struct CR *CRArray = malloc (sizeof (struct CR) * 14500);

虽然,因为它是 VS,在这种情况下你可能需要转换 malloc 的返回值。

另外,别忘了free内存。

【讨论】:

  • 非常感谢!程序现在运行良好。
  • 是否需要强制转换取决于文件的扩展名。只有.c,VS才会真正编译为C代码(而不是C++),然后就不需要强制转换了。
  • 你节省了我很多时间!谢谢@anthony-arnold
猜你喜欢
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多