Bonjour,
pour désallouer un pointeur on utilise la fonction free(), mais comment désallouer un pointeur de pointeur ?
merci de votrer réponse,
Bonjour,
pour désallouer un pointeur on utilise la fonction free(), mais comment désallouer un pointeur de pointeur ?
merci de votrer réponse,
Bah free pareil.Envoyé par FamiDoo
free(*pointeur);
Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
Mon espace perso[/B]
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]
Pour chaque malloc tu as un free. Tout dépend ensuite de ce que tu fais avec ton pointeur sur pointeur.
Bonjour,
admetons que tu as alloué de cette façon :
ceci est une méthode assez classique pour allouer un **.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int **ToTo ; ToTo = malloc(Hauteur*sizeof(int *)) ; assert(ToTo != NULL) ; for (i=0 ; i < Hauteur ; i++) { ToTo[i] = malloc(Largeur*sizeof(int)) ; assert(ToTo[i] != NULL) ; }
Pour la désallouer, il faut faire l'inverse avec free :
Et selon les compilateur et l'OS, tu peux (voire tu dois) rajouter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for (i=0 ; i < Hauteur ; i++) free(ToTo[i]) ; free(ToTo) ;
Bonne continuation
Code : Sélectionner tout - Visualiser dans une fenêtre à part ToTo = NULL ;
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Absolument aucun rapport avec le compilateur ou l'OS. Le fait de donner à un pointeur une valeur cohérente est une question de Bonne Pratique. C'est tout.Envoyé par ToTo13
Pas de Wi-Fi à la maison : CPL
exact ça devrait fonctionnerfree(*p) ?
Ca dépend comment a été alloué p[0] et si il existe des p[1], p[2] etc.Envoyé par pit9.76
Ca a déjà été expliqué...
Pas de Wi-Fi à la maison : CPL
ça compile ça ? n'y a t il pas un probleme avec "ToTo[i]" alors que la déclaration est "int ** ToTo;". ne faudrait il pas avoir :int **ToTo ;
ToTo = malloc(Hauteur*sizeof(int *)) ;
assert(ToTo != NULL) ;
for (i=0 ; i < Hauteur ; i++)
{
ToTo[i] = malloc(Largeur*sizeof(int)) ;
assert(ToTo[i] != NULL) ;
}
"int ** (ToTo[N])
Non.Envoyé par pit9.76
Revision de cours sur les pointeurs requise?
Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
Mon espace perso[/B]
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]
ToTo[i] renvoie un pointeur, c'est tout.Envoyé par pit9.76
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
effectivementRevision de cours sur les pointeurs requise?
int * ptr <=> int ptr[] ( c'est ça ?)
Non c'est différent.Envoyé par pit9.76
A gauche un pointeur sur 1 entier, à droite un tableau de n entiers qui revient à déclarer en même temps un pointeur, sur la 1ere case du tableau, et réserver une zone mémoire.
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
ok ça je comprend, ce que je comprend pas finalement c'est comment il peut manipuler son pointeur toto avec []. ToTo[i] est équivalent à quoi? (en utilisant des *)A gauche un pointeur sur 1 entier, à droite un tableau de n entiers qui revient à déclarer en même temps un pointeur, sur la 1ere case du tableau, et réserver une zone mémoire.
P.S. :désolé si je comprend rien j'ai le cerveau lent ........
L'opérateur "[]" permet d'accéder à des éléments situés à la suite d'un pointeur en indiquant un offset.
Il est utilisé par les pointeurs et les tableaux.
Avant de l'utiliser il faut s'assurer que l'offset pointe sur une zone mémoire valide: réservée dynamiquement ou statiquement.
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
AllocationLibération
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int **ToTo ; ToTo = malloc(Hauteur*sizeof(int *)) ; assert(ToTo != NULL) ; for (i=0 ; i < Hauteur ; i++) { ToTo[i] = malloc(Largeur*sizeof(int)) ; assert(ToTo[i] != NULL) ; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (i=0 ; i < Hauteur ; i++) { free(ToTo[i]) ; } free(Toto);
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Merci pour toutes ces réponses.
J'aimerai avoir toutefois une précision.
Concernant le "assert", à quoi cela sert-il ?
De plus, si je fais un malloc pour mon tableau dynamique et qu'il contient des valeurs.
Est ce que lors d'un realloc, les valeurs du tableau seront conservées ?
"Assert" permet de quitter le programme en affichant un message.
Oui, la zone mémoire est étendue en conservant le contenu.Est ce que lors d'un realloc, les valeurs du tableau seront conservées ?
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
La macro assert() n,'est utilisée qu'en phase de debug. Elle sert à 'pieger' le code (traps) sur des comportements interdits résultant d'un mauvais codage.Envoyé par FamiDoo
En aucun cas, on ne doit utiliser assert() pour traiter des erreurs liées au système (erreur mémoire, I/O...) ni à l'utilisateur.
Ceci pour une raison simple, en phase de production (release), la macro globale NDEBUG est définie, ce qui a pour conséquence de ne pas compiler les macros assert().
Oui, c'est garanti par le langage (heureusement). Par contre, les nouvelles valeurs seront évidemment indéterminées. Il peut être utilise de les initialiser...De plus, si je fais un malloc pour mon tableau dynamique et qu'il contient des valeurs.
Est ce que lors d'un realloc, les valeurs du tableau seront conservées ?
Pas de Wi-Fi à la maison : CPL
Pas d'accord. assert(), c'est pas fait pour ça.Envoyé par Trap D
Voir ma réponse à FamiDoo...
Pas de Wi-Fi à la maison : CPL
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager