在Windows和Linux中运行时获得不同的输出,以便在C++中进行冒泡排序
Getting different outputs when running in Windows and Linux for a bubble sort in C++
我正在尝试学习一些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]
是可疑的。
相关文章:
- 如何在C++中对数组进行冒泡排序
- 我想在 c++ 中对单向链表进行冒泡排序,但我一直面临左值错误,无法解决它
- 在C++中使用冒泡排序时出现意外值
- 冒泡排序中所需的交换次数,而无需实际对其进行排序
- 如何对文件中数组中的单个列进行冒泡排序?C++
- 需要关于如何将我的随机数数组连接到冒泡排序的帮助
- 冒泡排序无法对C++中的对象的动态数组进行排序
- 冒泡排序.C++
- 链表的冒泡排序
- 有没有选择排序优于冒泡排序的输入
- C++:如何使用冒泡排序来重新排列我的数据
- 冒泡排序随机数
- 矢量下标超出范围-冒泡排序
- 使用冒泡排序比较类对象
- 在c++中使用冒泡排序/交换对字符串进行排序
- 矢量下标超出范围错误,C++,冒泡排序
- 冒泡排序、选择排序和插入排序
- 使用冒泡排序c++对结构数组的成员进行优先级排序
- 冒泡排序链表C++
- 行搜索和冒泡排序的问题