C ++数组排序产生意外结果

时间:2018-08-24 05:11:03

标签: c++

我的代码给出了意外的结果。此代码用于对数组中的元素进行排序。运行后会给出不同的答案。有人可以建议问题可能在哪里吗?

void func(int *arr,int N){
    sort(arr,arr+N);
    for(int i=0;i<N;i++){
        cout<<arr[i]<<" ";}
    cout<<endl;
}
int main() {
    int N;
    int *arr=new int[N];
    cin>>N;
    for(int j=0;j<N;j++){
        cin>>arr[j];
    }

    func(arr,N);
    return 0;
}

输入:

84
1 0 1 2 1 1 0 0 1 2 1 2 1 2 1 0 0 1 1 2 2 0 0 2 2 2 1 1 1 2 0 0 0 2 0 1 1 1 1 0 0 0 2 2 1 2 2 2 0 2 1 1 2 2 0 2 2 1 1 0 0 2 0 2 2 1 0 1 2 0 0 0 0 2 0 2 2 0 2 1 0 0 2 2

输出:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 10 807415840 807415840 807415840
807415840 807416096 807416096 807416352 807416352 824193056 824193056
824193312 824193312 824193312 824193568 824193568 824193568 840970272
840970272 840970272 840970272 840970272 840970272 840970272 840970272
840970528 840970528 840970784 840970784 840970784 840970784 840970784

2 个答案:

答案 0 :(得分:2)

您的代码中有一个未初始化的变量。

int N;

online cpp reference on Uninitialized variables

  

可以创建没有值的变量。这是非常危险的,但是在某些情况下可以提高效率。要创建没有初始值的变量,只需不包含初始值:

// This creates an uninitialized int
int N;
  

未初始化变量中的值可以是任何值–不可预测,并且每次运行程序时都可能不同。读取未初始化变量的值是未定义的行为-这始终是一个坏主意。必须先使用一个值对其进行初始化,然后才能使用它。

因此,在根据N的值分配数组的内存之前,请对其进行初始化。对于您的情况,请先阅读它。

cin>>N;
int *arr=new int[N];

在使用cin之前,先检查N是否成功,以及 for(int i = 0; i < inviteArray.lenght(); ++i){ invitetextView[i].setText(inviteArray[i]); } 的值是否在可接受的范围内,也是一种好习惯。

答案 1 :(得分:1)

N的值不确定时,您正在创建数组,因此程序的结果是不确定的。

移动此行;

cin>>N;

在此行之前:

int *arr=new int[N];