Проблема в этом конструкторе:
word(const char *s) // No default c'tor
{
str=const_cast<char*>(s);
cnt=strlen(s);
}
Здесь вы не выделяете память для копирования строки в переменную str
. Но в деструкторе класса вы делаете delete[] str;
, так как память для str
не выделяется с помощью new[]
, это происходит сбой. Вам необходимо выделить память, аналогичную той, которую вы делаете в конструкторе копирования, и скопировать строку во вновь выделенную память. Или еще лучше, используйте std::string
.
EDIT:
Если вы действительно не хотите использовать std::string
по какой-либо причине, вам также нужен оператор присваивания с проверкой self assignment , как упомянуто @icabod.