Ошибка при удалении динамического массива
При удалении динамического массива возникает исключение:
"нарушение доступа для чтения.this было 0xFFFFFFFFFFFFFFFF"
и переходит в файл xmemory.
Это приложение для работы с файлами. Функция Total() принимает три разных пути к ранее заполненным файлам. Далее из этих файлов с помощью AppendToArray() данные записываются в три массива. И в конце функция PrintToConsole() выводит это все на консоль.
Но когда я удаляю tempArr в AppendToArray(), возникает исключение, и открывается файл xmemory.
void Total(std::string namePath, std::string amountPath, std::string pricePath)
{
std::ifstream nameFileFrom;
std::ifstream amountFileFrom;
std::ifstream priceFileFrom;
// Чтобы потом удобно вывести на консоль, использую массивы:
int sizeName = 1, sizeAmount = 1, sizePrice = 1;
std::string* names = new std::string[sizeName]{};
std::string* amounts = new std::string[sizeAmount]{};
std::string* prices = new std::string[sizePrice]{};
AppendToArrays(nameFileFrom, namePath, names, sizeName);
AppendToArrays(amountFileFrom, amountPath, amounts, sizeAmount);
AppendToArrays(priceFileFrom, pricePath, prices, sizePrice);
PrintToConsole(names, amounts, prices);
delete[]names;
delete[]amounts;
delete[]prices;
}
void AppendToArrays(std::ifstream& file, std::string path, std::string arr[], int& size)
{
// Открываем ранее заполненный файл
file.open(path);
if (!file.is_open())
{
std::cout << "\nError\n";
}
else
{
std::string data; // Сюда будем построчно записывать данные из файла
int ind = 0;
std::string* tempArr = new std::string[size];
while (!file.eof())
{
if (ind == 0)
{
data = "";
file >> data;
arr[ind] = data; // записываем в соответствующий массив
}
else
{
for (int i = 0; i < size; i++)
{
tempArr[i] = arr[i];
}
// Увеличиваем массив на 1:
delete[]arr;
size++;
std::string* arr = new std::string[size];
//Заполняем его обратно:
for (int i = 0; i < size - 1; i++)
{
arr[i] = tempArr[i];
}
// Добавляем новый элемент:
data = "";
file >> data;
arr[ind] = data;
delete[]tempArr;
std::string* tempArr = new std::string[size];
for (int i = 0; i < size; i++)
{
tempArr[i] = arr[i];
}
}
ind++;
}
delete[]tempArr; // <- Здесь происходит ошибка
}
file.close();
}
Вывод должен выглядеть примерно так:
ID Название Количество Цена
1 Пирожок 5 45
2 Растегай 5 55
3 Булка 7 30