可变大小的阵列分拣机无缘无故地窃听

Variable size array sorter bugging with no reason

本文关键字:拣机 无缘无故 窃听 阵列      更新时间:2023-10-16

我正在编写一个算法,要求用户告诉数组的大小,然后是值。之后,代码对值进行排序并返回结果。代码如下:

#include <iostream>
#include <string>
using namespace std;
int nvals, k, var, size;
void mysort(int arrayy[]){ 
    int i,j; 
    int temp; 
    for(i=0;i<size;i++) 
        for(j=0;j<size;j++) 
            if(arrayy[j]>arrayy[j+1]){ 
                temp=arrayy[j]; 
                arrayy[j]=arrayy[j+1]; 
                arrayy[j+1]=temp; 
            } 
    cout << "Your sorted array is: [";
    for(i=1;i<10;i++) cout<<arrayy[i]<<", ";
    cout << "].n";
}
void main(int argc){
    cout << "Number of variables" << endl;
    cin >> size;
    int *arrayy;
    arrayy = new int[size];
    for (int iii=0;iii<size;iii++){
        cout << "Enter number:" << endl;
        cin >> var;
        arrayy[iii] = var;
    }
    mysort(arrayy);
}

不幸的是,编译后,它输出Your sorted array is: [然后突然崩溃!我一直试图操纵事情,看看我是否可以让它发挥作用,但我没有成功。如何修复代码以使其正常工作?谢谢。

让我们假设size == 4 .

您最终将设置j == 3,然后访问arrayy[j]arrayy[j+1]。此时访问arrayy[j+1]会引起未定义的行为,因为它位于数组外部。

将所有"10"条目替换为"size",您将获得所需的内容:

#include <iostream>
#include <string>
using namespace std;
int k, size;
void mysort(int arrayy[]){ 
    int i,j; 
    int temp; 
      for(i=0;i<size;i++) 
     for(j=0;j<size;j++) 
      if(arrayy[j]>arrayy[j+1]){ 
         temp=arrayy[j]; 
         arrayy[j]=arrayy[j+1]; 
         arrayy[j+1]=temp; 
       } 
    cout << "Your sorted array is: [";
    for(i=1;i<=size;i++) {
        if (i<size){
            cout<<arrayy[i]<<",";
        }
        else
            cout<<arrayy[i];
    }
    cout << "].n";
}
void main(int argc){
    cout << "Number of variables" << endl;
    cin >> size;
    int *arrayy;
    arrayy = new int[size];
    for (int iii=0;iii<size;iii++){
        cout << "Enter number:" << endl;
        cin >> arrayy[iii];
    }
    mysort(arrayy);
}

另外,我添加了一些格式化行,以便您的数组可以在第二个括号附近很好地格式化。