在Windows和Linux中运行时获得不同的输出,以便在C++中进行冒泡排序

Getting different outputs when running in Windows and Linux for a bubble sort in C++

本文关键字:冒泡排序 C++ 输出 Linux Windows 运行时      更新时间:2023-10-16

我正在尝试学习一些C++,并注意到在Windows中打印数组时(使用CLion或Cygwin),如果我在Windows中编译/执行,则长度变量会覆盖数组中的最后一个元素。调试时,不清楚为什么长度会替换数组中的最后一个元素。但如果我在Ubuntu中编译/执行,我会得到预期的输出。

有人知道为什么会发生这种情况吗?我没有以任何方式更改代码。我刚刚编译。

代码。。

#include <iostream>
using namespace std;
int main() {
    int myArray[] = {44, 9, 237, 1, 5, 44, 534, 17, 21, 819};
    int temp = -1;
    int end = 10;
    int length = 10;
    for(int counter = length - 1; counter > 0; counter-- ) {
        for(int index = 0; index < end; index++) {
            if( myArray[index] > myArray[index + 1]) {
                temp = myArray[index + 1];
                myArray[index + 1] = myArray[index];
                myArray[index] = temp;
            }
        }
        end--;
    }
    for(int index = 0; index < 10; index++) {
        cout << myArray[index] << " ";
    }
    cout << endl;
 }

Cygwin/Windows输出。。。

1 5 9 10 17 21 44 44 237 534

Ubuntu输出。。。

1 5 9 17 21 44 44 237 534 819
index可能是end - 1时,

myArray[index + 1]是未定义的行为。

最糟糕的是,在大多数编译器实现中,myArray[end]可能与temp位于同一内存位置。那么temp = myArray[index + 1]是可疑的。