Ошибка при удалении динамического массива

При удалении динамического массива возникает исключение:
"нарушение доступа для чтения.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



Ответы (0 шт):