begin process at 2012 02 13 13:22:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

DLL et allocation mémoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

DLL et allocation mémoire

jeudi 4 novembre 2004 à 16:18:17 | DLL et allocation mémoire

Bebert37

Bonjour à tous,

J'ai un petit problème de désallocation mémoire avec une DLL.
Une Dll alloue de la mémoire pour une programme tièrce, lorsque ce programme tente de désalouer cette zone mémoire ... bein boum patatrac .. ça bug.
C'est normale puisque vraisemblablement , seul la dll qui a fait l'allocation mémoire peut la désallouer.
La question est la suivante ... que ce passe t-il lorsque la dll est libérer ?? la mémoire allouer par la dll est elle libérée aussi ou pas ??

merci a tous
jeudi 4 novembre 2004 à 16:35:41 | Re : DLL et allocation mémoire

BruNews

Administrateur CodeS-SourceS
La memoire allouee depuis une DLL peut tres bien etre desallouee par le prog qui a charge la DLL puisque la DLL est dans l'espace memoire du prog.

Pas de desalloc automatique si tu decharges par FreeLibrary() a moins de le gerer dans Dllmain().

ciao...
BruNews, MVP VC++
jeudi 4 novembre 2004 à 17:41:09 | Re : DLL et allocation mémoire

Bebert37

>La memoire allouee depuis une DLL peut tres bien etre desallouee >par le prog qui a charge la DLL puisque la DLL est dans l'espace >memoire du prog.

bein en regardant sur un site j'ai trouvé ça :
"Attention, au allocation mémoire ! Une donnée allouée par une DLL d'un compilateur doit être déssallouer par la même DLL" (le site)

et effectivement lorsque je fait un truc dans le genre :

char* string=NULL;

MaDll=getlibrarie(..);
mafct=getprocadress(...);

mafct(&string);

realloc(string,0);
// ou
free(string);

et bein au debug ça plante sur la désallocation.

y'a surement un truc qui m'a echappé ....
jeudi 4 novembre 2004 à 17:52:57 | Re : DLL et allocation mémoire

BruNews

Administrateur CodeS-SourceS
Un pointeur memoire est VALIDE tant qu'on est dans le meme espace memoire, ce qui est le cas pour une DLL avec son prog utilisateur. Tout autre discours est errone et s'il en etait autrement Windows ne tournerait pas. Prends exemple avec API FormatMessage() qui alloue la memoire et que le prog libere.
Il ne reste bien sur qu'a gerer correctement les pointeurs memoire.

ciao...
BruNews, MVP VC++
jeudi 4 novembre 2004 à 17:55:09 | Re : DLL et allocation mémoire

ymca2003

Ce que dit Brunews est vrai pour les fct de gestion mémoire de l'API. Pour celle du C (malloc, free, new, delete), c'est à la dll de se charger de l'alloc et de la libération (chaque module gère son heap).
jeudi 4 novembre 2004 à 18:06:22 | Re : DLL et allocation mémoire

BruNews

Administrateur CodeS-SourceS
Mais c'est bien sur qu'il faut utiliser l'API pour transferer les pointeurs memoires, je n'imagine meme pas qu'on puisse envisager autrement.

ciao...
BruNews, MVP VC++
vendredi 5 novembre 2004 à 10:18:30 | Re : DLL et allocation mémoire

Bebert37

heu ... mettez vous d'accord .... javascript:AjoutSmiley('');

BruNews dit:
"Un pointeur memoire est VALIDE tant qu'on est dans le meme espace memoire, ce qui est le cas pour une DLL avec son prog utilisateur."

ymc2003 dit :
"Pour celle du C (malloc, free, new, delete), c'est à la dll de se charger de l'alloc et de la libération"

BrNews dit:
"Mais c'est bien sur qu'il faut utiliser l'API pour transferer les pointeurs memoires ..."
remarque:
comme je l'ai montré dans l'exemple, j'ai passé l'adresse du pointeur a ma fct .. ce qui permet de conservé la mémoire allouer par une fonction apres le dépilmement du context de la fct.

si un pointeur mémoire est valide n'importe où ... pkoi on peut pas l'allouer dans une dll et le désallouer dans le prog principale ??




vendredi 5 novembre 2004 à 10:55:52 | Re : DLL et allocation mémoire

ymca2003

Réponse acceptée !
le pointeur est valide partout, ça c'est vrai.

en ce qui concerne l'allocation et la désalocation, il faut que cela soit symètrique :
VirtualAllov/VirtualFree ; HeapAlloc/Heapfree ; malloc/free ; new/delete.

pour les fct du C, le problème se pose car les lib du runtime peuvent être linké statiquement (chaque dll gère son heap) ou dynamiquement (heap partagé) et dans ce cas, faire un malloc dans un contexte et le free dans un autre ne marche pas.

maintenant, avec les fcts APi, la désalloc peut être faite n'importe où du moment que l'on sait comment cela a été alloué (car on a un lien dynamique avec ces fcts).


Pour être sur de ne pas avoir de pb, si la dll offre une allocation, ele doit se charger de faire la désallocation. Comme cela, l'utilisateur de la dll n'aura pas à se préocuper de quelle fct API appeler pour libérer et la dll pourra changer son mode d'allocation sans que l'appli utilisatrice ne soit à modifier.

PS : voir le chapitre 19 de richter :
http://brunews.free.fr/brunews/download/JR4.zip
vendredi 5 novembre 2004 à 12:08:41 | Re : DLL et allocation mémoire

Bebert37

merci bien pour cette éclairage de lanterne ..

en suivant tes indications ça marche ...j'aurais préféré ne pas utiliser de fonction de l'API mais bon ...
tant pis
merci bien


Ce sont les tonneaux vides et les hommes pleins qui font le plus de bruit
javascript:AjoutSmiley('');


Cette discussion est classée dans : programme, dll, mémoire, allocation


Répondre à ce message

Sujets en rapport avec ce message

prd de fuite mémoire. [ par gyzmo1 ] Salut à tous, dans mon programme je dois utiliser beaucoup de matrice et donc pas mal d'allocation dynamique. Je desalloue regulièrement mes tableaux( Allocation de mémoire dans une dll ? [ par tintin72 ] Bonjour, Lorsque de la mémoire est allouée par une dll, est ce que cette mémoire doit être également  libérée par la dll ou est ce que l'application h Allocation mémoire [ par loicus ] Bonjour,voila j'ai un très gros problème....j'ai fais un petit programme pour calculer des transformées de Fourierdonc j'utilise des tableaux assez lo Allocation mémoire [ par cogno ] Bonjour à tous. Je me posais les deux questions suivantes: 1/ Quand on parle de la pile et du tas, c'est un espace mémoire alloué dans la RAM? 2/ Si allocation mémoire CUDA [ par aziz1803 ] Bonjour, je travaille sur une carte GPU asus EN9800GT et windows XP 32 bits. je veux faire un traitement sur un tableau de 100000 cases (unsigned cha C:Plantage du programme lors de l'utilisation de fonctions contenues dans une dll [ par snoussia ] Bonjour,Je suis actuellement en cours de développement d' projet en c sous VS2003  qui utilise des fonctions de communication via les sockets que j'ai Dll sous linux [ par alexatique ] Bonjour, Voila mon probleme, je dois developper une dll sous visual studio, faire un programme qui appelle cette dll. Ceci je l'ai validé.Mais mainten lancer GUI DLL à partir de mon programme EXE [ par khaliloenit ] Salut, - Je suis en train d'exécuter une DLL GUI à partir de mon programme (. Exe) - J'ai fait tout ce qui concerne l'exportation de fonction qui ser Utilisation mémoire par un programme [ par ndubien ] Bonjour, Je souhaite savoir s'il est possible de connaître la mémoire utilisée par un programme quelconque.Et si, oui comment?<img height="13 Libération de mémoire dans une application [ par Rankin ] Bonjour à tous !Je bosse actuellement sur le développement d'un programme d'analyse de logs. Sans rentrer dans le détail, il ouvre des fichiers matcha


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,293 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales