COPIER LE CONTENU D'UN POINTEUR VERS UN AUTRE AVEC REDIMENTIONNEMENT AUTOMATIQUE
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 2004
-
5 mars 2003 à 10:05
superpa
Messages postés113Date d'inscriptionlundi 24 février 2003StatutMembreDerniè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.
superpa
Messages postés113Date d'inscriptionlundi 24 février 2003StatutMembreDerniè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és455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 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);
}
5 mars 2003 à 10:37
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
5 mars 2003 à 10:05
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);
}