为什么程序会崩溃?

Sco*_*ink 0 c++ crash

我正在制作一个c ++程序,它应该从标准输入读入一个整数N.然后应该从文件"data.txt"读取一个大小为N的数组.然后它应该将它传递给一个反转数组的函数返回指向新数组的指针.然后它应该打印返回指针的数组的内容.但每次我运行该程序时它都会崩溃.有任何想法吗?

#include <iostream>
#include <fstream>

using namespace std;

int * reverseArray(int * arr, const int size)
{
//int arr1[size];
int *arr2 = new int[size];
for(int iii = 0; iii < size; iii++)
{
    (*(arr2+iii)) = (*(arr + size - 1 - iii));
}

return arr2;
}

int main()
{
int N;
cin >> N;
if(N >= 0 && N <= 50)
{
    ifstream inputFile;
    inputFile.open("data.txt");
    int *arr = new int[N];
    int iii = 0;
    while(inputFile >> (*(arr+iii)) && iii < N)
    {    iii++;}

    arr = reverseArray(arr, N);

    for(int jjj = 0; jjj < N; jjj++)
    {
        cout << (*(arr+jjj)) << endl;
    }

    delete [] arr;
    inputFile.close();
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 6

我认为问题在于:

while(inputFile >> (*(arr+iii)) && iii < N)
Run Code Online (Sandbox Code Playgroud)

检查确保iii小于N访问后发生的检查.重新排序条件:

while(iii < N && inputFile >> (*(arr+iii)) )
Run Code Online (Sandbox Code Playgroud)

注意这一行引入了内存泄漏:

arr = reverseArray(arr, N);
Run Code Online (Sandbox Code Playgroud)

因为这是C++考虑使用std::vector<int>.