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

C++ C++;数组排序产生意外结果,c++,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];

我的代码给出了意外的结果。此代码用于对数组中的元素进行排序。在运行时,它给出了不同的答案。有人能告诉我问题出在哪里吗

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;
}
输出:

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

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

移动这条线

cin>>N;
在这一行之前:

int *arr=new int[N];

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

int N;
从:

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

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

因此,在根据N的值分配数组的内存之前,先对其进行初始化。在你的情况下,先读一读

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

在使用前检查
cin
是否成功,以及
N
的值是否在可接受的范围内也是一种很好的做法。

调试器可以。检查Put
cin>>N上面一行。将您的示例输出张贴在此处。请查看
std::array
std::vector
。您不应该再使用旧的C样式数组,它们只会带来麻烦;)
cin>>N;
int *arr=new int[N];