Ну начнём с того, что string в с++ это объект
std::string.
Type *array получается указатель на объект типа string.
Вы выделяете 100 байт памяти и указатель на эту память преобразуете в указатель на объект типа std::string.
А потом в эти 100 байт пытаетесь записать объект, который, очевидно, имеет размер больше 100 байт.
UPD
Попробуйте добавить больше 25 элементов типа int или более 12 элементов типа double - получите тот же segfault
UPD2
Вообще обычно такие вещи делают
связным спискомUPD3
Нашел несложную
реализацию двусвязного списка на хабре.