为什么程序崩溃

Why is the program crashing?

本文关键字:崩溃 程序 为什么      更新时间:2023-10-16

我正在制作一个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;
}

我认为问题出在这里:

while(inputFile >> (*(arr+iii)) && iii < N)

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

while(iii < N && inputFile >> (*(arr+iii)) )

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

arr = reverseArray(arr, N);

由于这是C++,请考虑使用std::vector<int>

我建议将其更改为以下内容。尽管会指出,如果N<data.txt中的项目数。

while (iii < N && inputFile.good())
{
    inputFile >> *(arr+iii);
    ++iii;
}
int *arrRev = reverseArray(arr, N);
for(int jjj = 0; jjj < N; ++jjj)
{
    cout << (*(arrRev+jjj)) << endl;
}
delete [] arr;
delete [] arrRev;
inputFile.close();