在 gcc 中,在 linux 上,我使用这个操作没有问题:
s->voti->next
但在 DevC++ 中,在 Windows 上,它会导致分段错误:(
为什么?我究竟做错了什么?:(
在这里找到完整的代码
- 第 82 行(cur=cur->next应该等于s->voti = s->voti->next)
我认为这不是一个好问题,但第 187 行的函数调用在new_node->voti
传递给insertMateria
.
Dev-C++不是编译器。它是一个 IDE。它与 MinGW GCC 打包在一起(即它是GCC),这取决于您使用的 Dev-C++ 版本,但是,它可能是非常旧的 GCC 版本。
综上所述,这不是编译器之间的区别。如果取消引用无效指针(未初始化或未分配有效地址的指针),则后续行为未定义。“未定义”包括行为在不同平台、不同编译器、不同编译器选项甚至同一机器上相同代码上的不同执行上会不同的可能性。
也就是说,在这种情况下,您的代码(在您发布的行之前)有问题,而不是编译器。它在 Linux 和 Windows 上可能都不正确,但“未定义”的行为与预期的完全不同。