Что не так в вашем коде?
Другие ответы объясняют, как сделать это лучше.Мой ответ объясняет, почему ваш код не работает так, как вы ожидали, и быстрое исправление, чтобы заставить его работать.
С оператором:
delete[] cstr;
Вы удаляете строку после нажатияобъект в векторе, это заставляет ваши векторные элементы указывать на что-то, что уже было выделено.
закомментируйте эту строку и проверьте снова, она будет работать.
Здесь рабочий образец вашего кода на Ideone.
Ваш вектор в этом случае должен взять на себя ответственность за удаление каждого содержащегося в нем указателя объекта, который указывает на динамическивыделенное пространство памяти.
См. this , чтобы узнать, как это сделать.