souliane a écrit :
Est ce que l'emplacement en mémoire de la chaine de caractere qui etait pointé par argv[1] sera libérée correctement à la fin de l'éxécution ?
|
News flash :
Citation :
Un groupe d'archéologues a trouvé une toute petite tablette sur le mont Sinaï. "Une incroyable découverte", d'après le Professeur Michel Arot, "nous pensions que les commandements étaient au nombre de dix, et nous venons d'en trouver un onzième"
Les experts en langue ancienne travaillent actuellement sur la signification du texte qui, traduit littéralement, donne ceci : "Tu ne désalloueras pas ce qui n'a pas été alloué".
Un message pour le moins étrange en ces temps anciens. Jean Valjean, de RFI pour France Info.
|
Donc puisque tu n'as pas alloué argv[], tu t'en moques. En plus il ne grossira pas en mémoire, et mettre un pointeur à NULL ne libère rien du tout, il faut utiliser free().
Sinon il est bon de savoir que sur tout OS digne de ce nom, toute la mémoire occupée par ton programme sera récupérée.
La désallocation ne fait que rendre disponible, à ton programme, la mémoire qui était marquée comme "occupée". Pour le système, rien ne change... de façon directe, en tout cas.
Si la désallocation est extrêmement importante, c'est parce que ne pas désallouer fait que ton programme grossi de plus en plus en mémoire, phagocytant les ressources systèmes. Ca s'appelle un memory leak, et c'est l'horreur quotidienne des programmeurs C et C++.
souliane a écrit :
Si oui, est ce déconseillé pour autant de modifier les argv[i] ? Pourquoi ?
|
C'est déconseillé dans la mesure où ça n'a aucun intérêt, si ce n'est ajouter un risque, celui d'accéder plus tard à une valeur qui a été mise à NULL alors qu'elle n'aurait pas dû l'être.
Tout ce qui détériore la maintenabilité est à proscrire.