Проблема работы с файлом С++

Всем добрый вечер. Я создал такую структуру:

#include <stdio.h>
#include <stdlib.h>

struct File
{
FILE * stream;
}

Мне потребовался массив таких структур:

int Size = 1
File * array_of_files = new File[Size];

Реализовал метод добавления элемента в такой массив:

void create_new_file(File *&array_, &size)
{
    if (size == 0)
    {
        return ;
    }
    size++;
    File* new_array_of_files = new File[size];
    for (int i = 0; i < size - 1; ++i)
    {
        new_array_of_files[i].stream = array_of_files[i].stream;
    }
    new_array_of_files[size - 1].stream = NULL;
    delete[] array_of_files;
    array_of_files = new_array_of_files;
}

Но когда я в конце программы закрываю все файлы (перед этим вызвав функцию добавления):

for (int i = 0; i < Size; ++i)
{
    fclose(array_[i].stream);
}

То сразу же при i = 0 срабатывает исключение: Нарушение доступа при чтении. При отладке, когда я копирую в new_array_of_files, в переменную new_array_of_files[i].stream действительно записывается адрес из исходного массива, но после выхода из функции, при закрытии файла, в этой переменной оказывается совсем другой адрес(0xdddddddd). При чём, когда я реализовывал данную функцию в стиле ООП (Одним из полей класса был данный массив, функция create такая же, в деструкторе был цикл, который показан выше) и никаких исключений не было, всё работало. Как данную проблему можно исправить? И почему в одном случае это работает, а в другом нет?

Заранее спасибо.


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