C++ 当相同的源代码在两个不同的编译器下给出不同的答案时,这意味着什么?

C++ 当相同的源代码在两个不同的编译器下给出不同的答案时,这意味着什么?,c++,compiler-construction,memory-leaks,valgrind,C++,Compiler Construction,Memory Leaks,Valgrind,我的代码在桌面上运行,但在远程集群上崩溃,这是一种非常奇怪的情况。我已经花了无数次检查我的cource代码是否有错误,在调试器中运行它以捕获破坏代码的内容,并在valgrind下查找内存泄漏(结果是干净的——至少在gcc下) 最终我发现,只要我使用相同的编译器(GCC4.4.5),相同的源代码在两台机器上产生相同的结果。问题是,我想在远程群集上使用英特尔编译器以获得更好的性能,还想使用一些使用英特尔的预构建库。此外,我仍然担心gcc可能忽略了英特尔编译器中的一些内存问题 这对我的代码意味着什么?

我的代码在桌面上运行,但在远程集群上崩溃,这是一种非常奇怪的情况。我已经花了无数次检查我的cource代码是否有错误,在调试器中运行它以捕获破坏代码的内容,并在valgrind下查找内存泄漏(结果是干净的——至少在gcc下)

最终我发现,只要我使用相同的编译器(GCC4.4.5),相同的源代码在两台机器上产生相同的结果。问题是,我想在远程群集上使用英特尔编译器以获得更好的性能,还想使用一些使用英特尔的预构建库。此外,我仍然担心gcc可能忽略了英特尔编译器中的一些内存问题


这对我的代码意味着什么?

它可能意味着您正在依赖


可能您忘记初始化变量,或者您访问的数组超出了其有效边界,或者您的代码中有类似
a[i]=b[i++]
的表达式。。。可能性实际上是无限的。

这可能意味着你正在依赖它


可能您忘记初始化变量,或者您访问的数组超出了其有效边界,或者您的代码中有类似
a[i]=b[i++]
的表达式。。。这种可能性实际上是无限的。

崩溃是否会导致核心文件?如果来自多个核心转储的回溯跟踪(相当于gdb“bt”命令)是一致的,那么您可以开始有选择地放入printf语句,并在堆栈跟踪中向上回溯函数列表

若并没有检测到内存泄漏,那个么堆可能是正常的。这使得堆栈成为一个潜在的问题区域。看起来您可能有一个未初始化的变量正在破坏堆栈


尝试使用gcc/g++编译命令参数中包含的'-fstack protector'编译应用程序。

崩溃是否会导致核心文件?如果来自多个核心转储的回溯跟踪(相当于gdb“bt”命令)是一致的,那么您可以开始有选择地放入printf语句,并在堆栈跟踪中向上回溯函数列表

若并没有检测到内存泄漏,那个么堆可能是正常的。这使得堆栈成为一个潜在的问题区域。看起来您可能有一个未初始化的变量正在破坏堆栈


尝试使用gcc/g++编译命令参数中包含的'-fstack protector'编译应用程序。

如何找到它们?您建议的任何工具?为了进一步参考,列出了许多未定义行为的常见来源。@GradGuy您可以使用Valgrind来检测未初始化值的使用或对无效内存地址的访问。@petersohn:我使用Valgrind来实现此目的,它不会报告任何错误。还有,上面说代码是无泄漏的。我怎样才能找到它们?您建议的任何工具?为了进一步参考,列出了许多未定义行为的常见来源。@GradGuy您可以使用Valgrind来检测未初始化值的使用或对无效内存地址的访问。@petersohn:我使用Valgrind来实现此目的,它不会报告任何错误。还有,上面说代码是无泄漏的。你能给我们看一些代码吗?也许这个错误对我们中的一些人来说是显而易见的。我会的,但不幸的是,这是一个包含多个文件的大型项目,我不知道这可能来自哪里。是否有任何代码解析器可以建议可能的未定义行为?最近发生在我身上-在调试中编译时,我的未初始化bool为true,但在发行版中编译时为false。VS2012你能给我们看一些代码吗?也许这个错误对我们中的一些人来说是显而易见的。我会的,但不幸的是,这是一个包含多个文件的大型项目,我不知道这可能来自哪里。是否有任何代码解析器可以建议可能的未定义行为?最近发生在我身上-在调试中编译时,我的未初始化bool为true,但在发行版中编译时为false。vs2012