当我改变数组的维度而不是相同的等式时,会得到不同的结果吗?

时间:2014-11-01 21:16:58

标签: c++ gcc

我正在使用Ubuntu 14.04并使用gcc编译我的C ++代码。当mn值(您可以在下面的代码中看到)等于6时,打印的x值介于1和{{1}之间};这是正常的和正确的;但6值以y开头,以7.0结尾。 12.0值也应以y开头,但当1.0m等于n时,我的问题不同。 5x值均以y结尾1开头。谁能帮帮我呢?

6

1 个答案:

答案 0 :(得分:0)

我很确定您打算使用for(i=1; i<n; i++){for(j=1; j<m; j++){

double x[6];有6个元素0,1,2,3,4和5。

这意味着如果您写入n[6] = 6,您将遇到未定义的行为。在这种情况下,nm恰好在内存中彼此相邻,当您写入n[6]时,您也会写入m[0]。尽管大多数C ++编译器都可能发生这种情况,但您不能依赖此行为。由于C ++标准未定义,因此兼容的编译器无需保证在这种情况下应该发生什么。

至于为什么在nm为5的情况下不会发生这种情况。嗯,因为这是未定义的行为,所以不需要在行为上保持一致。它可能与内存排列有关,因此您的编译器可以在内存中以不同方式排序xy,或者在其间添加一些填充。