我正在使用Ubuntu 14.04并使用gcc
编译我的C ++代码。当m
和n
值(您可以在下面的代码中看到)等于6
时,打印的x
值介于1
和{{1}之间};这是正常的和正确的;但6
值以y
开头,以7.0
结尾。 12.0
值也应以y
开头,但当1.0
和m
等于n
时,我的问题不同。 5
和x
值均以y
结尾1
开头。谁能帮帮我呢?
6
答案 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
,您将遇到未定义的行为。在这种情况下,n
和m
恰好在内存中彼此相邻,当您写入n[6]
时,您也会写入m[0]
。尽管大多数C ++编译器都可能发生这种情况,但您不能依赖此行为。由于C ++标准未定义,因此兼容的编译器无需保证在这种情况下应该发生什么。
至于为什么在n
和m
为5的情况下不会发生这种情况。嗯,因为这是未定义的行为,所以不需要在行为上保持一致。它可能与内存排列有关,因此您的编译器可以在内存中以不同方式排序x
和y
,或者在其间添加一些填充。