trinitacs
Messages postés249Date d'inscriptionmardi 16 juillet 2002StatutMembreDernière intervention 7 août 2003
-
13 juin 2003 à 17:06
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
18 déc. 2003 à 15:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Peak
Messages postés7Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention27 octobre 2003 16 juin 2003 à 20:46
>>Message de NitRic déposé le 16/06/2003 12:54:48
t'as raison, je suis en general du même point de vu mais ce matin il était tôt et bon j'avai pas envie de faire l'extrèmiste...en plus les bonnes habitudes c'est au debut k'il faut les prendre ;)
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 16 juin 2003 à 14:34
OK :
Comme vous voudrez !
MOI ca me sert tout le temps !
...
(j'ai compris votre point de vue !)
cs_tootoon
Messages postés1Date d'inscriptionlundi 16 juin 2003StatutMembreDernière intervention16 juin 2003 16 juin 2003 à 13:46
ton truc est parfaitement inutile, imagine si tout les progs était trashé lorsqu'une alloc dynamique est foirée...
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 16 juin 2003 à 12:54
Oui, mais imagine qu'il ne libère pas la mémoire qu'il utilise ou autre chaque fois qu'il y à un problème ... s'il lui faut beaucoup de ram pour son prog, à la longue, il va beaucoup trop charger la ram et pour rien, de ce fait, il occupera une grande partie de la ram! Moi perso je dit:
IL FAUT FAIRE ATTENTION À NOTRE JOLIE PETITE RAM!!!
Même si elle est libérer à la fin du prog, quand il ce ferme ...
Mais, j'appuie Peak pour le début de sont commentaire, OO
@++;
~(.:: NitRic ::.)~
cs_Peak
Messages postés7Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention27 octobre 2003 16 juin 2003 à 10:01
if( (var = (type)malloc(size)) == NULL )
exit(1);
parti comme ça tu vas t'amuser à retaper toutes les fonctions systèmes (t'es pas sorti de l'auberge).
Dans la prog objet t'as la possibilité de créé des destructeurs par défaut ki seront appelé automatiquement quand nécessaire... (par exemple à la fin de ton prog ou à la sortie d'un bloc d'imbrication dans lequel ton objet est initialisé) ; grâce à ce système tu as donc la possibilité de te definir un destructeur par objet qui libère la mémoire de tes objets systématiquement. Tu évitera donc le prob de désalocation ;)
(cf. programmation objet en C++)
Ceci dis d'après moi il n'est pas crucial de désaloué t'as mémoire en cas d'erreur étant donné que les régions associé à ton processus seront kickées au moment de ton exit! (si bien entendu la région dans laquelle tu bosse n'est jamais partagé ;) )
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 15 juin 2003 à 16:32
Explique mio ce qu'est une 'bonne conception objet ' ?!?!
trinitacs
Messages postés249Date d'inscriptionmardi 16 juillet 2002StatutMembreDernière intervention 7 août 20032 15 juin 2003 à 15:45
"Parceque s'il y a une erreur au fin fond de ton programme, la petit fonction ne sera pas si le main, sa mere, ses soeurs, ou autre fonction deja appelees ont alloues."
Avec une bonne conception objet ça ne pose aucun problème.
NitRic à entièrement raison.
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 15 juin 2003 à 15:44
Ca c'est sur ;)
@++;
~(.:: NitRic ::.)~
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 15 juin 2003 à 15:42
Comme tu voudras !
Chacun est libre de penser et d'apprecier comme il le voit !
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 15 juin 2003 à 14:58
tu fais un exit(1); si malloc() renvoie NULL ... même pas le temp de gérer l'erreur s'il y en à une n'y rien du tout! Je continue à dire que c'est inutile, c'est bien pour apprend ou ce pratiquer avec les pointeurs, malloc et compagnie mais bon ... pas plus ...
@++;
~(.:: NitRic ::.)~
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 15 juin 2003 à 10:22
Exuse moi mais c'est toi qui te gour.
Je ne teste q'une seule fois, dans 'Malloc'.
Le second teste est juste pour l'exemple !
Sinon dans un programme normal tu n'aurais pas besoin de teste ! Ca c'est qui est avantageux !
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 15 juin 2003 à 05:35
Désolé de te dier ca mais ton code ne sert à rien ... si la ram, page file(swap) etc. .. sont pleins, malloc() na pas le choix de retourné null, malloc() ne retourne NULL que SI il n'y à pas assez de place en mem ou SI il y à un erreur, une grosse erreur qui empêche malloc() d'assigné une certaine place en mem, ton code fait exactement la même chose qu'un simple var = (type)malloc(size);, et c'est beaucoup plus court que ton code ... bref, je ne veut pas être méchant mais il ne sert à rien ... même avec ta fonction tu vérifie 2 fois si malloc retourne NULL ou non contrairement avec un simple malloc() direct, tu vérifie qu'une seul et unique fois ... repense-y ...
~(.:: NitRic ::.)~
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 13 juin 2003 à 23:34
Parceque s'il y a une erreur au fin fond de ton programme, la petit fonction ne sera pas si le main, sa mere, ses soeurs, ou autre fonction deja appelees ont alloues.
(surtout en Win 32)
MoDDiB
Messages postés546Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention 4 mai 20071 13 juin 2003 à 23:32
En quoi c'est impossible pour un gros projet de tous desallouer?
suffit de bien y penser a chaque allocations ^^
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 13 juin 2003 à 19:21
Oui mais c'est si rare !!!!!!!!!!
Si t'as une solution plus efficace appelle moi !
Quant il y a une erreur il faudrait donc liberer toutes les allocations (pour un gros projet c'est impossible) et (autre exemple) fermer tous les fichiers !
Moi je pense que cette maniere est est bon compromis entre les avantages (il y en a de bon), et les inconvenients evoques ci-dessus !
trinitacs
Messages postés249Date d'inscriptionmardi 16 juillet 2002StatutMembreDernière intervention 7 août 20032 13 juin 2003 à 18:25
C'est la mémoire qui n'est pas libérer par ton programme. Cela arrive en C/C++ car contrairement à Java il n'y a pas de garabe collecor qui fait le sale boulot.
Si une allocation échoue dans ton programme, alors tes free ne seront pas éxécutés donc fuite de mémoire.
Pour résoudre ce problème on utilises les auo_ptr.
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 13 juin 2003 à 17:28
C'est quoi des 'fuites de memoires' ????
trinitacs
Messages postés249Date d'inscriptionmardi 16 juillet 2002StatutMembreDernière intervention 7 août 20032 13 juin 2003 à 17:06
Ce qui est marrant ce sont les fuites de mémoires dans ton programme.
18 déc. 2003 à 15:56
Personnellement,
j'ai résolu le pb avec des macros et des exceptions...
donc, il n'y a pas forcément sortie du prg...
allez donc jeter un oeil sur cette page:
http://www.cppfrance.com/code.aspx?ID=18786
Magicalement
16 juin 2003 à 20:46
t'as raison, je suis en general du même point de vu mais ce matin il était tôt et bon j'avai pas envie de faire l'extrèmiste...en plus les bonnes habitudes c'est au debut k'il faut les prendre ;)
16 juin 2003 à 14:34
Comme vous voudrez !
MOI ca me sert tout le temps !
...
(j'ai compris votre point de vue !)
16 juin 2003 à 13:46
16 juin 2003 à 12:54
IL FAUT FAIRE ATTENTION À NOTRE JOLIE PETITE RAM!!!
Même si elle est libérer à la fin du prog, quand il ce ferme ...
Mais, j'appuie Peak pour le début de sont commentaire, OO
@++;
~(.:: NitRic ::.)~
16 juin 2003 à 10:01
exit(1);
parti comme ça tu vas t'amuser à retaper toutes les fonctions systèmes (t'es pas sorti de l'auberge).
Dans la prog objet t'as la possibilité de créé des destructeurs par défaut ki seront appelé automatiquement quand nécessaire... (par exemple à la fin de ton prog ou à la sortie d'un bloc d'imbrication dans lequel ton objet est initialisé) ; grâce à ce système tu as donc la possibilité de te definir un destructeur par objet qui libère la mémoire de tes objets systématiquement. Tu évitera donc le prob de désalocation ;)
(cf. programmation objet en C++)
Ceci dis d'après moi il n'est pas crucial de désaloué t'as mémoire en cas d'erreur étant donné que les régions associé à ton processus seront kickées au moment de ton exit! (si bien entendu la région dans laquelle tu bosse n'est jamais partagé ;) )
15 juin 2003 à 16:32
15 juin 2003 à 15:45
Avec une bonne conception objet ça ne pose aucun problème.
NitRic à entièrement raison.
15 juin 2003 à 15:44
@++;
~(.:: NitRic ::.)~
15 juin 2003 à 15:42
Chacun est libre de penser et d'apprecier comme il le voit !
15 juin 2003 à 14:58
@++;
~(.:: NitRic ::.)~
15 juin 2003 à 10:22
Je ne teste q'une seule fois, dans 'Malloc'.
Le second teste est juste pour l'exemple !
Sinon dans un programme normal tu n'aurais pas besoin de teste ! Ca c'est qui est avantageux !
15 juin 2003 à 05:35
~(.:: NitRic ::.)~
13 juin 2003 à 23:34
(surtout en Win 32)
13 juin 2003 à 23:32
suffit de bien y penser a chaque allocations ^^
13 juin 2003 à 19:21
Si t'as une solution plus efficace appelle moi !
Quant il y a une erreur il faudrait donc liberer toutes les allocations (pour un gros projet c'est impossible) et (autre exemple) fermer tous les fichiers !
Moi je pense que cette maniere est est bon compromis entre les avantages (il y en a de bon), et les inconvenients evoques ci-dessus !
13 juin 2003 à 18:25
Si une allocation échoue dans ton programme, alors tes free ne seront pas éxécutés donc fuite de mémoire.
Pour résoudre ce problème on utilises les auo_ptr.
13 juin 2003 à 17:28
13 juin 2003 à 17:06