Accueil > Forum > > > > DLL et allocation mémoire
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
|
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|