Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2423 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Peux t'on afficher le contenu d'un pointeur ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Peux t'on afficher le contenu d'un pointeur ?

n°772261
weed
Posté le 22-06-2004 à 04:18:19  profilanswer
 

voila j'ai quelques petits souci avec le free  
 
j'ai a un segment defaut à un free lorsque je veux librer le bloc.  
 
Dans mon cas je pense que cela est du que je ne fournis pas la bonne adresse, pas la meme que le malloc m'avait retourné.  
je suis persudé que je n'ai pas appellé 2 fois free sur le meme bloc d'ailleur
 
 
Ma question puis je vois les adresse que stocke des char *, j'ai essayé de faire avec un printf et un code format %d mais je suis pas sur que cela soit ca je crois que la meme est sauvegardé en hexa ....
 
Pourquoi je veux connaitre le contenu de mes pointeurs ?
et bien c'est pour connaitre les adresses de mes pointeurs et savoir si les adresses entre les free et les malloc corresponde.

mood
Publicité
Posté le 22-06-2004 à 04:18:19  profilanswer
 

n°772262
matafan
Posté le 22-06-2004 à 04:57:13  profilanswer
 

%d est bon dans ton cas (i386 je suppose). Dans le cas général %ld sera plus portable... Et si tu veux afficher l'addresse en hexa, utilise %lx ou %lX.

n°772271
Taz
bisounours-codeur
Posté le 22-06-2004 à 07:30:59  profilanswer
 

mais biensur ... c'est trop compliqué d'utiliser %p :o

n°772304
jagstang
Pa Capona ಠ_ಠ
Posté le 22-06-2004 à 09:07:38  profilanswer
 

un free sur un bloc déjà désaloué ne devrait pas poser de problème (même si ça dénote un malfonctionnement du ton algo)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°772309
Taz
bisounours-codeur
Posté le 22-06-2004 à 09:11:32  profilanswer
 

tu plaisantes là?

n°772311
jagstang
Pa Capona ಠ_ಠ
Posté le 22-06-2004 à 09:12:44  profilanswer
 

me suis jamais amusé à le faire mais c'est ce que j'ai lu :o
 
pas de bonne toi ce matin


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°772312
Taz
bisounours-codeur
Posté le 22-06-2004 à 09:13:50  profilanswer
 

tu ferais bien de lire un peu plus, le bug/faille du double free, c'est archi connu :o

n°772313
jagstang
Pa Capona ಠ_ಠ
Posté le 22-06-2004 à 09:15:09  profilanswer
 

Citation :

The free() function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs.


http://www.micro.uqam.ca/Ressource [...] /free.html


Message édité par jagstang le 22-06-2004 à 09:15:16

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°772315
Ace17
Posté le 22-06-2004 à 09:16:11  profilanswer
 

Un pointeur qui pointe vers une zone mémoire désallouée et un pointeur a null, c'est pas la meme chose...


Message édité par Ace17 le 22-06-2004 à 09:18:03
n°772316
jagstang
Pa Capona ಠ_ಠ
Posté le 22-06-2004 à 09:16:57  profilanswer
 

oui. j'ai lu un peu vite en effet...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
mood
Publicité
Posté le 22-06-2004 à 09:16:57  profilanswer
 

n°772318
jagstang
Pa Capona ಠ_ಠ
Posté le 22-06-2004 à 09:17:31  profilanswer
 

c'est ce que j'étais en train de me dire... mea culpa.
 
merci Taz :jap:


Message édité par jagstang le 22-06-2004 à 09:17:40

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°772320
WhatDe
Posté le 22-06-2004 à 09:23:10  profilanswer
 

J'aimes bien quand Taz intervient  :p  
Y'a toujours une certaine animation  :whistle:


---------------
[:whatde]
n°772476
HelloWorld
Salut tout le monde!
Posté le 22-06-2004 à 11:24:44  profilanswer
 

Généralement ton compilo te fourni les outils pour détecter ce genre de cas. Tu utilises quoi ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°773001
weed
Posté le 22-06-2004 à 17:28:48  profilanswer
 

j'utilise gcc
 
bon mon probleme est resolu, je specifié bien la bonne adresse mais j'ai fais un debordement. Je m'explique j'ai fais une premeire allocation, j'ai utilisé la variable puis apres j'ai realloué (avec un free puis malloc), j'ai utilisé le bloc memoire.
 
Puis apres j'ai fais une 3ème reallocation. J'ai utilisé le bloc normallement. Puis apres dans mon programme j'ai voulu reutilisé ce bloc memoiire et j'ai fais un debordement. Cela n'a pas généré d'erreur car, le 3 malloc m'a fournis la meme première adresse que le premiere malloc m'avait fourni.  
 
1 er malloc :
-------------------------------------------------------------------------------
0x804d208  |             |             |                |      *         |    *      |   *      |
-------------------------------------------------------------------------------
 
3ème malloc :
-------------------------------------------------
0x804d208  |             |             |                |
--------------------------------------------------
 
les blocs du 1er malloc avec les * n'ont pas été réalloué par le systeme du coup je n'ai eu d'ereur lors de mon debordement.  
 
 
Par contre chose que je n'arrive pas a comprendre, pour moi ce n'est pas le probleme de free que j'ai fais un Overflow. Pour moi il doit librer le bloc que le 3ème malloc m'a filé et point bar ....
 
Solution :
Donc pour reseoudre mon probleme, j'ai fais un 4ème malloc pour reserver plus de bloc et ainsi eviter l'Overflow

n°773036
Taz
bisounours-codeur
Posté le 22-06-2004 à 17:55:48  profilanswer
 

j'ai rien bité

n°773073
HelloWorld
Salut tout le monde!
Posté le 22-06-2004 à 18:16:54  profilanswer
 

Citation :

Solution :  
Donc pour reseoudre mon probleme, j'ai fais un 4ème malloc pour reserver plus de bloc et ainsi eviter l'Overflow


Solution:
Corriger ton code buggé qui fait un overflow.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°773075
schnapsman​n
Zaford Beeblefect
Posté le 22-06-2004 à 18:17:14  profilanswer
 

il veux dire qu'il a écrasé de la mémoire derrière un bloc alloué par malloc, et que ça fesait planter son free ultérieur (enfin je pense)


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°773078
weed
Posté le 22-06-2004 à 18:21:15  profilanswer
 


ce que je veux dire, j'ai plusieurs allocation/desalocation de buf  
1 er malloc (buf = malloc (7)) :  
-------------------------------------------------------------------------------------------------------------------  
0x804d208  | 0x804d209| 0x804d210 | 0x804d211 | 0x804d212 | 0x804d213 | 0x804d214 |  
-----------------------------------------------------------------------------------------------------------------
 
 
3 ème malloc  (buf = malloc (5)) :
-------------------------------------------------------------------------------------------------------------------  
0x804d208  | 0x804d209| 0x804d210 | 0x804d211 | 0x804d212 |                   |                   |  
-----------------------------------------------------------------------------------------------------------------
 
au 1er et le 3eme malloc, on m'a fourni la meme adresse : 0x804d208.  
lorsque j'ai utilisé, le bloc du 3ème bloc, j'ai fais un debordement. J'ai ecrit sur les blocs de 0x804d208 à 0x804d12, mais j'ai également écris à l'adresse 0x804d213. J'ai fais un debordement. Lorsque j'avais fais mon 3ème malloc, j'avais reservé que jusqu'a 0x804d212. Lorsque j'ai ecris sur 0x804d213, je n'ai eu d'erreur car je pense qu'entre le 1er malloc et le 3ème malloc, l'adresse 0x804d213, n'a pas été réutilisé par le systeme.  
 
Mais du fais que j'ai ecris sur 0x804d213, lorsque j'ai voului liberer le bloc  0x804d208 -> 0x804d212 que malloc m'a fourni, free n'a pas voulu car j'ai ecris également en dehors. Cela me surprends mais ca a l'air d'etre ca ...
 
J'espere que ce coup ci je me suis fais mieux comprendre ...

n°773080
weed
Posté le 22-06-2004 à 18:22:25  profilanswer
 

HelloWorld a écrit :

Citation :

Solution :  
Donc pour reseoudre mon probleme, j'ai fais un 4ème malloc pour reserver plus de bloc et ainsi eviter l'Overflow


Solution:
Corriger ton code buggé qui fait un overflow.


réalloué une 4ème fois et inclure l'adresse 0x804d21 dans mon exemple

n°773106
HelloWorld
Salut tout le monde!
Posté le 22-06-2004 à 18:47:33  profilanswer
 

C'est quoi la question ?
Tu nous dit que du fais des overflow, tu nous explique que ça plante. Soit, c'est normal. Et ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°773113
weed
Posté le 22-06-2004 à 18:57:31  profilanswer
 

non ca plante pas lorsque j'ecris car j'avais precedement alloué le meme bloc et ca n'a pas été réutilisé ...
 
Mais ce qui me surprends, c'est lorsque je libere avec un free. Pour moi peu importe que je fasse un Overflow lorsque je libere c'est pas son probleme ...
 
 
Apres peut etre que cela vient du fait que j'ai ecrasé un flag que le 3ème malloc a posé necessaire pour faire un free par la suite.
Et en faisant mon  Overflow j'ai écrasé le flag et du coup le free ne sait pas ou s'arretter, il ne sait pas jusqu'a quel bloc il doit liberer. Cela vient peut etre de la.

n°773119
Carbon_14
Posté le 22-06-2004 à 19:03:52  profilanswer
 

Faut peut-être "faire du ménage" dans la façon de traîter la mémoire, que ce soit plus "limpide" à gérer... :-)

n°773137
Taz
bisounours-codeur
Posté le 22-06-2004 à 19:24:17  profilanswer
 

j'ai toujours rien bité, je comprends rien à tes calculs et suposition foireuses qui conduisent directe à l'erreur de segmentation

n°773491
HelloWorld
Salut tout le monde!
Posté le 22-06-2004 à 23:24:20  profilanswer
 

Le manière dont la mémoire est gérée par la lib standard est spécifique à ton compilateur. Tes constatations ne sont pas généralisables. Sur un autre système / compilo / version de ton compilo, ça peut faire autre chose.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Peux t'on afficher le contenu d'un pointeur ?

 

Sujets relatifs
comment éviter d'afficher des résultats doubles ?afficher une popup
Afficher des formulaires web ASPX sur une page HTMLSupprimer les fichier contenu ds Temp avec un .bat a chaque reboot??
comment afficher des enregistrements ????????????LONGBLOB à afficher !
[borland C++] afficher une image bitmap URGENT svpgestion de contenu via fopen
[resolu]Comment afficher le nombre d'element d'une BDD[resolu] Afficher le contenu de la base de donnée dans l'ordre
Plus de sujets relatifs à : Peux t'on afficher le contenu d'un pointeur ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR