Почему происходит сбой программы? - PullRequest
0 голосов
/ 27 февраля 2012

Я делаю программу на С ++, которая должна считать из стандартного ввода целое число 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;
}

Ответы [ 2 ]

6 голосов
/ 27 февраля 2012

Я думаю, что проблема здесь:

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

Проверка, чтобы убедиться, что iii меньше N, происходит после доступа.Измените условия:

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

Обратите внимание, что в этой строке указана утечка памяти:

arr = reverseArray(arr, N);

Поскольку это C ++, рассмотрите возможность использования std::vector<int>.

0 голосов
/ 27 февраля 2012

Я бы предложил изменить его следующим образом.Хотя следует отметить, что вы получите неопределенный вывод, если N <количество элементов в data.txt. </p>

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();
...