当我更改数组的维度但对于相同的等式时,结果不同

Different results when I change the dimension of the array but for the same equation?

本文关键字:结果 于相同 数组      更新时间:2023-10-16

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

#include <iostream>
#include <cstdlib>
#include <cstdio>
#define m 6
#define n 6
using namespace std;
int main() {
    double f[8][n][m], feq, rho[n][m];
    double x[n], y[m], w[8], dx, dy;
    dx = 1.0;
    dy = 1.0;
    x[0] = 0.0;
    y[0] = 0.0; 
    int i,j;
    for (i = 1; i < n+1; i++) {
        x[i] = x[i-1] + dx;
        printf("%fn",x[i]);
    }
    for (j = 1; j < m+1; j++) {
        y[j] = y[j-1] + dy;
        printf("%fn",y[j]);                
    }
    return 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,或者在两者之间添加一些填充。