[英]Why is the program crashing?
我正在制作一个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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.