COPIER LE CONTENU D'UN POINTEUR VERS UN AUTRE AVEC REDIMENTIONNEMENT AUTOMATIQUE

cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 5 mars 2003 à 10:05
superpa Messages postés 113 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 5 janvier 2004 - 5 mars 2003 à 10:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10513-copier-le-contenu-d-un-pointeur-vers-un-autre-avec-redimentionnement-automatique

superpa Messages postés 113 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 5 janvier 2004
5 mars 2003 à 10:37
Ok, thanks pour les améliorations.
1 précision:
return la destination peut s'avérer utile: ca permet de recopier en série redim(&p1,redim(&p2,redim(&p3,p4)));
et ca s'inscrit dans la lignée de strcpy.
Encore merci
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
5 mars 2003 à 10:05
bonne idée mais ...
des fautes ...
et des avertissements à donner aux utilisateurs de la fonction !

on libère la mémoire allouée par new[] en utilisant delete[]... pas delete
Avertir les utilisateurs d'utiliser la fonction UNIQUEMENT si le premier pointeur a été alloué sur le tas (par new) et non pas sur la pile ou l'allocation statique : sinon TRAP)
C'est bien d'avoir pensé à l'optimisation ... si longueur suffisante, pas de delete[]/new[]
Dire aussi que le return est du "confort", non nécessaire.
Tu aurais pû utiliser une référence de pointeur plutôt qu'un double pointeur car c'est plus simple à l'appel :
void Redim2(char *&pCh1,const char *pCh2)
{
if(strlen(pCh1) < strlen(pCh2))
{ delete []pCh1;
pCh1=new char[strlen(pCh2)+1];
}
strcpy(pCh1,pCh2);
}