【问题标题】:Problema of difference between DevC + + and gcc [closed]Dev C++和gcc之间的区别问题[关闭]
【发布时间】:2013-02-03 09:00:52
【问题描述】:

在gcc中,在linux上,我使用这个操作没有问题:

s->voti->next

但在 DevC++ 中,在 Windows 上,它会导致分段错误:(

为什么?我究竟做错了什么? :(

找到完整代码here

  • 第 82 行cur=cur->next 应该等于 s->voti = s->voti->next

【问题讨论】:

  • 请大家耐心等待这是OP在否决或关闭之前关于SoF的第一个问题,请花点时间提出如何改进问题。
  • 通常最好只隔离一小部分足以隔离问题的代码,以便获得更好的答案。
  • Stack Overflow 无限期地维护问题以造福社区。链接到临时异地位置的代码是没有帮助的,因为当链接过期时,它会使这个问题变得不那么有用,尤其是当这个代码看起来不是完全有问题的代码时(w.r.t. 第 82 行?)。

标签: c gcc dev-c++


【解决方案1】:

我认为这不是一个好问题,但第 187 行的函数调用在传递给 insertMateria 之前肯定没有初始化 new_node->voti

【讨论】:

    【解决方案2】:

    Dev-C++ 不是编译器。它是一个 IDE。它与 MinGW GCC 一起打包(即它 GCC),这取决于您使用的 Dev-C++ 版本,但是很可能是非常旧的 GCC 版本。

    综上所述,这不是编译器之间的区别。如果取消引用无效指针(未初始化或未分配有效地址的指针),则后续行为未定义。 “未定义”包括行为在不同平台、不同编译器、不同编译器选项甚至在同一台机器上的相同代码上的不同执行上会不同的可能性。

    也就是说,在这种情况下,您的代码(在您发布的行之前)有问题,而不是编译器。它在 Linux 和 Windows 上可能都不正确,但“未定义”的行为与预期的完全不同。

    【讨论】:

    • 它也可以与闪亮的新 TDM-GCC 版本一起打包。 ;) sourceforge.net/projects/orwelldevcpp
    • @Orwell:我知道那个项目,这就是我询问版本的原因。我猜这是你的项目?
    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 2013-12-30
    • 2010-09-11
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多