Я пытаюсь выучить C ++, в процессе я попытался написать функцию, которая получает два указателя на символы и соединяет второй с первым (я знаю, что для этого есть strcat
).
Но я хочу изменить первый указатель параметра, чтобы он указывал на результат. по этой причине я использовал ссылку на указатель в первом параметре.
Прежде чем вернуться из функции, я хочу освободить память первого параметра, но у меня появляется ошибка.
Вот код:
void str_cat(char*& str1, char* str2)
{
if (!str1)
{
str1 = str2;
return;
}
if (!str2)
return;
char * new_data = new char[strlen(str1) + strlen(str2) +1];
char * new_data_index = new_data;
char * str1_index = str1;
char * str2_index = str2;
while(*str1_index)
*new_data_index++ = *str1_index++;
while(*str2_index)
*new_data_index++ = *str2_index++;
*new_data_index = NULL;
delete str1; //ERROR HERE (I also tried delete[] str1)
str1 = new_data;
}
Я не понимаю, почему.
Есть предложения?
Спасибо
Итай \
EDIT
Вот как я использую функцию
char * str1 = NULL;
char * str2 = NULL;
str_cat(str1, "abc");
str_cat(str2, "def");
str_cat(str1, str2);