Просто не корректно идёт работа с realloc. Вот информация:
Если функции не удалось выделить требуемый блок памяти, возвращается нулевой указатель, и блок памяти, на который указывает аргумент ptr(m_Data) остается неизменным.
1. Ошибка в консолиВ нашем случае, т.к. каждый раз в два раза увеличивается размер выделенной памяти, в итоге приходим к тому, что не удаётся выделить блок памяти, realloc возвращает NULL указатель, и этот указатель помещается в m_Data, вывод ошибки в консоль. Что собственно не верно сделано, т.к. старый m_Data все еще указывал на ранее выделенную память.
2. Утекает память, не очищаетсяВ деструкторе ~CellArray() должна почиститься память, но т.к. указатель NULL, то ранее выделенная память "утекает"
3. Падение сервераПродолжение пункта 1
Далее происходит ещё один push, сервер падает на строке
- Код: Выделить всё
cell *arr = &m_Data[m_Size * m_BlockSize];
Т.к m_Data == NULL, но это уже не важно, т.к. вся проблема комом пошла со строки
- Код: Выделить всё
m_Data = (cell *)realloc(m_Data, sizeof(cell)* m_BlockSize * m_AllocSize);
метода bool CellArray::GrowIfNeeded(size_t count)
Поздравляю, вы нашли баг