Libération de la mémoire allouée au préalable avec la fonction malloc.

Résolu
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 - 17 juil. 2010 à 18:59
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 - 17 juil. 2010 à 21:43
Bonjour.

J'ai une question à propos de la libération de mémoire allouée au préalable avec la fonction malloc.

Si j'alloue une chaîne de caractères ainsi :
char *szv = (char *)malloc(200*sizeof(char));

et que par la suite je décale son pointeur comme cela :
szv+=3;

est-ce que lors de la libération de la mémoire allouée je dois faire :
free(szv-3);

ou dois-je faire tout simplement free(szv) ?

En espérant une réponse de votre part, je vous en remercie d'avance.

Greg.

2 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
17 juil. 2010 à 19:35
Salut,

Il faut faire free(szv-3); comme tu l'as dit en premier lieux. Un conseil si tu dois décaler ton pointeur de la sorte : créé un second pointeur pointant vers la même zone mémoire mais que tu ne modifiera pas, comme ça tu garde dans un coin l'addresse à passer à free :

  char *szv = (char *)malloc(200*sizeof(char));
  char *plop = szv;

  szv += 3; /* toutes les modifs que tu veux */
  free(plop);
3
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
17 juil. 2010 à 21:43
D'accord, je vais faire comme ça.

Merci beaucoup.
0