uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
12 mars 2010 à 13:49
cs_Yuzuru
Messages postés4Date d'inscriptiondimanche 2 novembre 2008StatutMembreDernière intervention18 mars 2010
-
18 mars 2010 à 17:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Yuzuru
Messages postés4Date d'inscriptiondimanche 2 novembre 2008StatutMembreDernière intervention18 mars 2010 18 mars 2010 à 17:41
le strcpy insère bien '\0'. Je ne fais que retirer le doute de uaip. Sinon je ne vois pas ce qui y a dire de plus que les précédents.
Yuzu
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 13 mars 2010 à 11:17
C'est pas faux. Pour se faire, Il peut utiliser return strdup(Chaine);
cs_tibur
Messages postés101Date d'inscriptionsamedi 9 février 2002StatutMembreDernière intervention 5 mai 2009 13 mars 2010 à 03:55
Hello,
Que fait le client de ta fonction quant à la chaine retournée ? Logiquement, il se doit de faire un free dessus, non ? Or si tu renvois la chaine passée en paramètre comme lorsque tu fais :
if(NDeplacement==0){return Chaine;}
ton client va faire un free de sa propre chaine.
Ça va pas bien se passer :
* soit un double free
* soit un free d'une chaine constante
Il faut que le comportement de ta fonction soit identique quel que soit les arguments. C'est à dire : allouer une chaine dans tous les cas.
Tib.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 12 mars 2010 à 13:49
Salut,
J'ai regardé le code en speed...
if ((Chaine[0]=='\0')||(PositionAjustement<0))
{
return Chaine;
}
if (NDeplacement==0)
{
return Chaine;
}
devient
if ((Chaine[0]=='\0') || (PositionAjustement<0) || (NDeplacement==0)) return Chaine;
if (NDeplacement<0) ...
if (NDeplacement>0) ...
devient
if (NDeplacement<0) ...
else ...
(puisque NDeplacement != 0 dès le départ)
sizeof(char) = 1, si je dis pas de connerie, sous n'importe quel OS
Et tu oublies le +1 dans le malloc, non ?
Et je ne sais plus si strcpy insère le '\0'.
18 mars 2010 à 17:41
Yuzu
13 mars 2010 à 11:17
13 mars 2010 à 03:55
Que fait le client de ta fonction quant à la chaine retournée ? Logiquement, il se doit de faire un free dessus, non ? Or si tu renvois la chaine passée en paramètre comme lorsque tu fais :
if(NDeplacement==0){return Chaine;}
ton client va faire un free de sa propre chaine.
Ça va pas bien se passer :
* soit un double free
* soit un free d'une chaine constante
Il faut que le comportement de ta fonction soit identique quel que soit les arguments. C'est à dire : allouer une chaine dans tous les cas.
Tib.
12 mars 2010 à 13:49
J'ai regardé le code en speed...
if ((Chaine[0]=='\0')||(PositionAjustement<0))
{
return Chaine;
}
if (NDeplacement==0)
{
return Chaine;
}
devient
if ((Chaine[0]=='\0') || (PositionAjustement<0) || (NDeplacement==0)) return Chaine;
if (NDeplacement<0) ...
if (NDeplacement>0) ...
devient
if (NDeplacement<0) ...
else ...
(puisque NDeplacement != 0 dès le départ)
sizeof(char) = 1, si je dis pas de connerie, sous n'importe quel OS
Et tu oublies le +1 dans le malloc, non ?
Et je ne sais plus si strcpy insère le '\0'.
Bref, je dois y aller, bonne continuation.