【发布时间】:2020-02-20 02:17:10
【问题描述】:
我正在编写一个循环遍历二维数组的函数,如果数组中的当前元素小于它旁边的元素,那么我会将 1 添加到我的 int 计数器变量。问题是,当我使用 AMD ryzen 7 处理器在基于 Windows 的机器上运行代码时,它工作正常并且计数器变为 20(在 5x5 阵列上)。但是,当我在配备英特尔酷睿 i5 处理器的 2014 Macbook 上运行它时,在 MacOS 和 Windows 10(bootcamp)上,使用相同的代码块,计数器只能达到 19。这是我的循环
int counter = 0;
for(int i=0; i < ROWS; i++){
for(int j=0; j < COLUMNS; j++){
if(board[i][j] < board[i][j + 1]){
counter += 1;
}
}
}
我认为这适用于任何情况。
【问题讨论】:
-
board的内容从何而来?两个测试都一样吗?
-
应该的。因此,某处必须存在未定义的行为。不幸的是,如果没有minimal reproducible example 任何人都可以剪切/粘贴并重现您观察到的结果,那么没有人能够进一步帮助您。
-
如果您的板子有 COLUMNS 列,那么 j+1 将超出其边界,因此您将获得未定义的行为。
-
处理器不运行 C++ 代码。他们运行机器代码。不管你需要发minimal reproducible example
-
处理器根本不运行 C++ 代码。您是重新编译代码以便在另一台计算机上运行它,还是使用相同的可执行文件?