Probleme d'allocation de mémoire dynamique (malloc/free)

PhantomPowaa Messages postés 7 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 12 mars 2004 - 4 mars 2004 à 18:29
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 9 mars 2004 à 22:02
Bonjour,

J'ai un petit probleme avec les fonctions malloc et free dans certains de mes programmes. Apparement le malloc s'effectue correctement, mais au moment de libérer la mémoire avec free, le programme créé une erreur. J'ai esayé en remplaçant malloc et free par GlobalAlloc et GlobalFree, cela ne marche pas non plus sauf dans un cas, si l'on utilise malloc AVEC GlobalFree (mais cette solution ne fonctionne qu'en mode debug, pas en release).
Petite précision, je programme avec Visual C++ NET, et sous windows (Win32 API).
Si quelqu'un à une idée de là d'ou peut provenir l'erreur, ça serait gentil de me répondre parce que je souhaiterais quand meme faire un code propre et sans code qui ne marche qu'à moitié ;)
merci d'avance pour vos réponses et vive le C++/Win32

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 mars 2004 à 18:41
Si tu veux remplacer le 'malloc' devra se faire pour HeapAlloc ou VirtualAlloc, GlobalAlloc est a considerer comme obsolete.

Dans tous les cas, aucune raison que free n'aille pas avec malloc. Verif que tu ne modifies pas le pointeur retourne par malloc, genre ptr++ ou ptr--.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_pheno Messages postés 141 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 23 mars 2005 1
4 mars 2004 à 18:44
Salut
tu ne ferais pas un malloc sur une chaine de caracteres??
du style malloc(sizeof(char)*strlen(chaine))
si c est
rajoute +1
malloc(sizeof(char)*strlen(chaine)+1)
car il faut compter \0
si ce n est pas ca
je ne vois pas d ou vient le probleme
@++

Chevalier Pheno Starboard, membre de la Freeman-Corp
0
PhantomPowaa Messages postés 7 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 12 mars 2004
5 mars 2004 à 13:01
Merci pour vos réponses,

je vais essayer avec Virtual et Heap.
Pour ce qui est de la taille passée au malloc, ça ne vient pas de là, j'ai bien vérifié.
De plus j'ai fait quelques tests, et en activant certaines optimisations de VC NET, le programme marche sans probleme en release. En fait j'ai l'impression que ça vient des options du compilateur, faut dire que .NET est assez lourd pour ça, perso je trouve que y en a trop.
C'était bien le temps de VC+ ;) pas de prise de tete avec les options du compilo, avec NET faut d'abord débuguer les options du compilo avant le programme, vive le progres :D

merci encore et a+
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
9 mars 2004 à 21:47
mdr... Si ca vient d un bug du compilateur c est vraiment trop drole. Laisser passer un bug si enorme...Bon d accord peut etre qu il est super particulier, mais en tout cas je fais bien de me contenter de gcc et g++ sous Linux et VC++ 6 sous windows!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 mars 2004 à 22:02
Quelle idee aussi de compiler autrement qu'en release, jamais vu l'interet de mettre en debug.
VS 2003 est absolument tip top.
Faut comparer asm produit par VC6, fait pitie a cote du recent.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Rejoignez-nous