C++ 向量下标超出范围-气泡排序

C++ 向量下标超出范围-气泡排序,c++,vector,sorting,C++,Vector,Sorting,我有一段代码,它实现了数组的气泡排序。 在MS VS 2012中编译时,它的工作原理如下: UPD:我添加了很多检查,以跟踪崩溃发生的确切位置,如下所示: 它交换数组的前两个元素,打印出一个交换了这些元素的数组,然后打印出“Checking”并与“vector subscript out out range”崩溃 #包括“stdafx.h” #包括 #包括 #包括 #包括 使用名称空间std; 整数检查(向量数组) { printf(“检查:\n”); 对于(int i=0;i

我有一段代码,它实现了数组的气泡排序。 在MS VS 2012中编译时,它的工作原理如下:

UPD:我添加了很多检查,以跟踪崩溃发生的确切位置,如下所示: 它交换数组的前两个元素,打印出一个交换了这些元素的数组,然后打印出“Checking”并与“vector subscript out out range”崩溃

#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
整数检查(向量数组)
{
printf(“检查:\n”);
对于(int i=0;i
for (j = size - 1; i > 0; i--)
对于维数为N的数组,索引从0变为N-1

必须成为

for (j = size - 1; i > 0; i--)
对于维度N的数组,索引从0变为N-1

您得到了一个“off by one”错误:

for(i=0;i0;i--)
//   ^^^^
//j超出范围,最后一个有效索引为size-1
if(数组[j]<数组[j-1])
交换(数组[j],数组[j-1]);
您出现了“一次关闭”错误:

for(i=0;i0;i--)
//   ^^^^
//j超出范围,最后一个有效索引为size-1
if(数组[j]<数组[j-1])
交换(数组[j],数组[j-1]);

你为什么还要为asm费心?编译器可以让代码尽可能好。我想你的
for(j=size;…)中有一个循环变量问题
循环…实际上有两个循环-一个涉及
i
而不是
j
,另一个以
size
开始,它已经超过了数组的末尾。@AlanBaljeu因为编写冒泡排序的唯一好理由是作为一种编码练习,大概他们是在使用asm学习asm。我同意。我不相信有使用asm进行交换是一个很好的理由。除了这是一个需要asm的家庭作业之外。请忽略asm。我确信这不会发生。是的,我正在学习它。你为什么还要费心使用asm?编译器可以让代码尽可能好。我想你的
中有一个循环变量问题(j=尺寸;…)
循环…实际上有两个循环-一个涉及
i
而不是
j
,另一个以
size
开始,它已经超过了数组的末尾。@AlanBaljeu因为编写冒泡排序的唯一好理由是作为一种编码练习,大概他们是在使用asm学习asm。我同意。我不相信有使用asm进行交换是一个很好的理由。除了这是一个需要asm的家庭作业之外。请忽略asm。我确信这不会发生。是的,我正在学习它。我感觉一些
I
s和
j
s在这段代码中也被混淆了。我感觉一些
I
s和
j
s在这段代码中被混淆了代码也一样
for (j = size - 1; i > 0; i--)
for (i = 0; i < size; i++)
    for (j = size; i > 0; i--)
    //   ^^^^
    //   j is out or range, the last valid index is size-1
        if (Array[j] < Array[j-1])
            swap(Array[j], Array[j-1]);