当我更改数组的维度但对于相同的等式时,结果不同
Different results when I change the dimension of the array but for the same equation?
我正在使用 Ubuntu 14.04 并使用 gcc
编译我的C++代码。当m
和n
值(您可以在下面的代码中看到(等于6
时,打印的x
值介于 1
和 6
之间;这是正常和正确的;但是y
值以 7.0
开头,以 12.0
结尾。 y
值也应该以1.0
开头,但是当m
和n
等于5
时,我没有同样的问题。x
和 y
值都以 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
,则会遇到未定义的行为。在这种情况下,n
和m
恰好在内存中彼此相邻,当您写入n[6]
时,您也写入m[0]
。尽管大多数C++编译器都可能发生这种情况,但不能依赖此行为。由于它未被C++标准定义,因此兼容的编译器不需要保证在这种情况下会发生什么。
至于为什么这不会发生在你身上,n
和m
是 5.好吧,由于这是未定义的行为,因此行为不需要一致性。它可能与内存排列有关,因此编译器可以在内存中以不同的方式排序x
和y
,或者在两者之间添加一些填充。
相关文章:
- 算术运算的结果类似于:C浮点变量中的1/3
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 按值传递变量与按引用传递变量具有相同的结果
- 数组上的相同逻辑会产生不同的结果
- C++位移位在相反方向上具有相同的常量,结果不同,代码更改很小
- 由于相同的文件名/类名存在于不同的SO中而导致的SEG错误
- SDL2填充圆-相同的操作,不同的结果
- 相同的 for 循环适用于其他项目,但不适用于此项目。为什么?
- 相同的结果 qsort vs std::sort
- xgboost C API 不会产生与 Python 相同的结果
- 使用来自不同库的相同函数获得不同的结果
- 如果我在每个平台上使用相同的种子,随机结果会相同吗?
- 关于C++套接字,为什么服务器总是返回相同的结果?
- 为什么 == 运算符没有产生与 strcmp 相同的结果?
- 在这种情况下,GCC 和 clang 是否显示与 Visual Studio 相同的结果,关于语言链接?
- 以相同的结果测量时间
- 如何从源与存储库中安装相同的结果安装相同的结果
- C++两个库依赖于相同的库,但版本不同
- 如何将不同的实例化应用于相同的对象名称
- TEA中的加密和解密结果不相同