Результат current.c_str()
никогда не должен храниться какое-то время. Это неопределенное поведение, но вполне вероятно, что здесь указанная память будет использоваться повторно.
Вы помещаете char * из current.c_str()
в names[0]
, а затем добавляете новое значение в current
и положить current.c_str()
в names[1]
. Но поскольку вы изменили current
, вы также измените names[0]
.
Кроме того, в обоих случаях вы отбрасываете созданный вами указатель с помощью names[i] = new char[SPACE_FOR_EACH_NAME];
. Это выделяет блок памяти и помещает его адрес в names[0]
(0
в качестве конкретного примера c). Следующее, что происходит с names[0]
, это names[0] = (char*) current.c_str();
, который помещает другой адрес в переменную. Адрес, возвращаемый из new
, полностью теряется, что приводит к утечке памяти.
Вместо
names[count-1] = (char*) current.c_str();
try
std::strcpy(names[count-1],current.c_str())