Массивы не POD-объектов выделяются с new
, а не с malloc
, в противном случае конструкторы не запускаются.
Ваш код получает неинициализированную память и «интерпретирует» ее как ifstream
s, что, очевидно, приводит к сбою (потому что конструктор класса не был запущен, даже если указатели виртуальных таблиц находятся на месте).
Вы можете разместить все свои объекты в стеке:
ifstream file[2048];
или выделите их в куче, если занятость стека является проблемой;
ifstream *file=new ifstream[2048];
// ...
delete[] file; // frees the array
(хотя здесь следует использовать умный указатель, чтобы избежать утечек памяти в случае исключений)
или, что лучше, используйте vector
из ifstream
(требуется заголовок <vector>
):
vector<ifstream> file(2048);
, которые не требуют явного освобождения его элементов.
(теоретически, вы могли бы использовать malloc
, а затем использовать размещение new
, но я бы не рекомендовал его вообще)
<ч />
... кроме того, одновременное открытие 2048 файлов не является хорошей идеей ...