Utilisation mémoire

Résolu
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 - 21 août 2005 à 15:39
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 21 août 2005 à 17:16
Bonjour a tous,
Je voudrai savoir si lors de la fermeture d'un programme les objets créés dynamiquement doivent etre obligatoirement détruits,pour libérer la mémoire ou sont ils détruit automatiquement.
Merci de votre aide

11 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 août 2005 à 16:26
win32 et sup garantit la libération des ressources créées par un processus quand il est démappé de la mémoire.
Pour autant il faut garder l'habitude de coder proprement, à chaque alloc doit correspondre sa désalloc.

ciao...
BruNews, MVP VC++
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 août 2005 à 17:00
J'y connais pas grand chose, mais je crois qu'il est possible d'utiliser des fonctions équivalentes asynchrones. Regarde WSARecv
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 août 2005 à 17:04
Oui, je viens de retrouver comment rendre la socket s non bloquante:
ioctlsocket(s, FIONBIO, 1);
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 août 2005 à 15:58
Ils le sont automatiquement, mais c'est plus joli si tu le fais toi
même. Surtout si ton processus a une durée de vie assez longue, les
fuites de mémoires vont poser un problème
0

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

Posez votre question
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
21 août 2005 à 16:01
il faut toujours libéré les ressources memoire quand tu ferme un programme



-> utiliser free () dans le cas de malloc ()

-> DeleteObject () pour les API wind.



Je n'ai aucune idée si il sont détruit ou pas mais yas un ptit moyen de la savoir :



fait un programme expres ds le genre



int Winmain (........)

{

int n;

for (n=0;n < 10000;n++)

CreateObject (..........); //On cree dynamiquement 10000 objets

return 0;//On ferme ss detruire les 10000 objets

}



et un petit batch dans ce style :

1:

C:\ton_programme.exe

goto 1



si au bout de 5 min ton PC commence à foiré, c'est qu'il faut detruire les objet.......



@+, vinc1008881
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 août 2005 à 16:30
et pour le batch, ce sera plutot:

:1

C:\ton_programme.exe

goto 1
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
21 août 2005 à 16:40
Ok merci pour votre aide,mais je recontre aussi un problème avec un thread;je m'explique ce thread me sert dans une application via le net,pour faire l'écoute de nouveau client,le seul moyen que j'ai trouvé lorsque l'on quitte le programme c'est de forcer le thread a s'arréter mais normalement sa mémoire ne sera pas libérée;de plus (mais rien a voir) je voudrai savoir comment faire pour écouter les messages envoyés par les clients,car j'ai lu sur le site qu'il etait plutôt déconseillé de créer un thread par client,ùais plutot de faire un pour l'écoute un pour l'envoi ect.... le seul probléme est que recv est un fonction bloquante donc si le 1er client ne fait rien les autre ne pourront rien faire non plus...
Merci de m'aider pour ce sujet aussi
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 août 2005 à 16:53
Il faut juste que tu trouves un moyen pour que ton thread s'arrête lui
même, pour qu'il puisse libérer sa mémoire. Ca se fait facilement avec
une varaible booléenne globale
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
21 août 2005 à 16:55
Je vois ce que tu veux dire mais comment faire pour vérifier la variable le thread etant bloqué sur la fonction recv
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
21 août 2005 à 17:15
N'utilise pas les sockets bloquantes :
-soit tu fais des sockets non-bloquantes avec ioctlsocket()
-soit tu utilises WSAAsyncSelect() ou WSAAsyncEvent()

Ca devrait suffire (bien qu'il existe des methodes encore plus avancées).
Pour toute question par rapport a ces fonctions, soit MSDN, soit tu telecharges network2.chm sur betouchi.free.fr (site de aardman).

+2(p - n)
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
21 août 2005 à 17:16
Oups, j'ai oublié de rafraichir la page

+2(p - n)
0
Rejoignez-nous