J'essaie d'apprendre C++, dans le processus j'ai essayé d'écrire une fonction qui obtient deux pointeurs de char et concaténer le second au premier (je sais qu'il y a strcat
pour ce).
Mais - ce que je veux accomplir est de modifier le premier pointeur de paramètre afin qu'il pointe vers le résultat. pour cette raison j'ai utilisé une référence au pointeur dans le premier paramètre.Libération de mémoire dans le problème C++ (Visual Studio 2010)
Avant de revenir à la fonction, je souhaite libérer la première mémoire de paramètres, mais j'obtiens une erreur.
Voici le code:
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;
}
Je ne comprends pas pourquoi.
Des suggestions?
Merci,
Itay \
EDIT Voici comment utiliser la fonction
char * str1 = NULL;
char * str2 = NULL;
str_cat(str1, "abc");
str_cat(str2, "def");
str_cat(str1, str2);
Comment le code appelant crée-t-il le tampon transmis? –
'J'essaie d'apprendre C++', puis j'utilise 'std :: string' à la place des chaînes de style C. –
@Georg Fritzsche - J'ai essayé d'utiliser str_cat (str1, "aaa") mais je me suis rendu compte que le second paramètre n'était pas alloué en pile mais en pile donc je l'ai changé en nouveau [] ... mais ça ne marche toujours pas. –