Accueil > Forum > > > > memory leak sur const MyStrut* MyStruct
memory leak sur const MyStrut* MyStruct
samedi 8 février 2003 à 19:27:39 |
memory leak sur const MyStrut* MyStruct

citronz
|
Salut, J'ai un memory leak sur une déclaration et je n'arrives pas à l'enlever : (dll de type ATL) déclaration : const MyStruct* MyStruct; au constructeur : MyStruct = new MyStruct; au destructeur : rien... si je mets un <delete MyStruct;> j'ai un joli debug assertion failed... Une solution pour virer la chose ? Merci d'avance Philippe
|
|
dimanche 9 février 2003 à 00:19:10 |
Re : memory leak sur const MyStrut* MyStruct

jonathanmcdougall
|
> Salut, > > J'ai un memory leak sur une déclaration et je n'arrives pas à l'enlever : > déclaration : const MyStruct* MyStruct; > au constructeur : MyStruct = new MyStruct; > au destructeur : rien... si je mets un <delete MyStruct;> j'ai un joli debug assertion failed... > > Une solution pour virer la chose ?
Poster du code pourrait peut-être nous permettre de t'aider un peu plus. Mais vois ceci :
struct maStruct { int a, b, c; };
maStruct *s = new maStruct;
// utilisation de s
delete s;
Sans le delete, il y aurait memory leak. Maintenant, tu sembles utiliser new dans le constructeur et delete dans le destructeur de la struct. Mais que construis-tu? Un pointeur dans la struct? :
struct maStruct { char* mastring;
maStruct() { mastring = new String[30]; }
~maStruct() { delete[] mastring; } };
Sinon, quoi? N'oublie pas que si tu new un tableau, il te faut utiliser delete[].
Bonne journée,
-- Jonathan Mcdougal Montréal, Québec mcdougalljonathan@hotmail.com http://www.multimania.com/utopiasoftware
|
|
dimanche 9 février 2003 à 10:20:24 |
Re : memory leak sur const MyStrut* MyStruct

citronz
|
Oui j'ai été un peu mesquin sur le bout de code ... Je pensais que le problème était standard ... En voici + :
1) Dans le fichier .h de ma classe :
protected: const Mp3_Headerinfo* m_MpegHeader;
2) Dans le fichier .h lié
# define ID3_STRUCT(S) struct S
ID3_STRUCT(Mp3_Headerinfo) { Mpeg_Layers layer; Mpeg_Version version; MP3_BitRates bitrate; Mp3_ChannelMode channelmode; Mp3_ModeExt modeext; Mp3_Emphasis emphasis; Mp3_Crc crc; uint32 vbr_bitrate; // avg bitrate from xing header uint32 frequency; // samplerate uint32 framesize; uint32 frames; // nr of frames uint32 time; // nr of seconds in song bool privatebit; bool copyrighted; bool original; };
3) Dans le constructeur de ma classe :
m_MpegHeader = new Mp3_Headerinfo();
4) Dans le destructeur :
Rien justement sinon çà plante ...
Une idée ?
------------------------------- Réponse au message : -------------------------------
> > Salut, > > > > J'ai un memory leak sur une déclaration et je n'arrives pas à l'enlever : > > déclaration : const MyStruct* MyStruct; > > au constructeur : MyStruct = new MyStruct; > > au destructeur : rien... si je mets un <delete MyStruct;> j'ai un joli debug assertion failed... > > > > Une solution pour virer la chose ? > > Poster du code pourrait peut-être nous permettre de t'aider un peu plus. Mais vois ceci : > > struct maStruct > { > int a, b, c; > }; > > maStruct *s = new maStruct; > > // utilisation de s > > delete s; > > > Sans le delete, il y aurait memory leak. Maintenant, tu sembles utiliser new dans le constructeur et delete dans le destructeur de la struct. Mais que construis-tu? Un pointeur dans la struct? : > > struct maStruct > { > char* mastring; > > maStruct() > { > mastring = new String[30]; > } > > ~maStruct() > { > delete[] mastring; > } > }; > > Sinon, quoi? N'oublie pas que si tu new un tableau, il te faut utiliser delete[]. > > Bonne journée, > > -- > Jonathan Mcdougal > Montréal, Québec > mcdougalljonathan@hotmail.com > http://www.multimania.com/utopiasoftware
|
|
dimanche 9 février 2003 à 17:36:56 |
Re : memory leak sur const MyStrut* MyStruct

vieuxLion
|
Bonjour, tu as ta réponse je crois
évite de déclarer const un pointeur sur une zone que tu compte détruire par delete
maStruct *s = new maStruct; et delete s; OK const maStruct *s = new maStruct; et delete s; KO
------------------------------- Réponse au message : -------------------------------
> Oui j'ai été un peu mesquin sur le bout de code ... Je pensais que le problème était standard ... En voici + : > > 1) Dans le fichier .h de ma classe : > > protected: > const Mp3_Headerinfo* m_MpegHeader; > > 2) Dans le fichier .h lié > > # define ID3_STRUCT(S) struct S > > ID3_STRUCT(Mp3_Headerinfo) > { > Mpeg_Layers layer; > Mpeg_Version version; > MP3_BitRates bitrate; > Mp3_ChannelMode channelmode; > Mp3_ModeExt modeext; > Mp3_Emphasis emphasis; > Mp3_Crc crc; > uint32 vbr_bitrate; // avg bitrate from xing header > uint32 frequency; // samplerate > uint32 framesize; > uint32 frames; // nr of frames > uint32 time; // nr of seconds in song > bool privatebit; > bool copyrighted; > bool original; > }; > > 3) Dans le constructeur de ma classe : > > m_MpegHeader = new Mp3_Headerinfo(); > > 4) Dans le destructeur : > > Rien justement sinon çà plante ... > > Une idée ? > > ------------------------------- > Réponse au message : > ------------------------------- > > > > Salut, > > > > > > J'ai un memory leak sur une déclaration et je n'arrives pas à l'enlever : > > > déclaration : const MyStruct* MyStruct; > > > au constructeur : MyStruct = new MyStruct; > > > au destructeur : rien... si je mets un <delete MyStruct;> j'ai un joli debug assertion failed... > > > > > > Une solution pour virer la chose ? > > > > Poster du code pourrait peut-être nous permettre de t'aider un peu plus. Mais vois ceci : > > > > struct maStruct > > { > > int a, b, c; > > }; > > > > maStruct *s = new maStruct; > > > > // utilisation de s > > > > delete s; > > > > > > Sans le delete, il y aurait memory leak. Maintenant, tu sembles utiliser new dans le constructeur et delete dans le destructeur de la struct. Mais que construis-tu? Un pointeur dans la struct? : > > > > struct maStruct > > { > > char* mastring; > > > > maStruct() > > { > > mastring = new String[30]; > > } > > > > ~maStruct() > > { > > delete[] mastring; > > } > > }; > > > > Sinon, quoi? N'oublie pas que si tu new un tableau, il te faut utiliser delete[]. > > > > Bonne journée, > > > > -- > > Jonathan Mcdougal > > Montréal, Québec > > mcdougalljonathan@hotmail.com > > http://www.multimania.com/utopiasoftware >
|
|
lundi 10 février 2003 à 06:50:23 |
Re : memory leak sur const MyStrut* MyStruct

jonathanmcdougall
|
Ne pas poster par dessus un autre post, ça nuit à la visibilité. Réarrangé.
> > > J'ai un memory leak sur une déclaration et je n'arrives pas à l'enlever : > > > déclaration : const MyStruct* MyStruct; > > > au constructeur : MyStruct = new MyStruct; > > > au destructeur : rien... si je mets un <delete MyStruct;> j'ai un joli debug assertion failed... > > > > > > Une solution pour virer la chose ? > > > > Poster du code pourrait peut-être nous permettre de t'aider un peu plus. Mais vois ceci :
<snip>
> 1) Dans le fichier .h de ma classe : > > protected: > const Mp3_Headerinfo* m_MpegHeader;
protected, ça veut dire que très probablement d'autres classes héritent de cette classe X. Ton destructeur est-il virtuel? Sinon il ne sera jamais appelé :
class A { public: ~A(); };
class B : public A { public: ~B(); };
A *b = new B; delete b;
Au delete, ~A() n'est pas appelé s'il n'est pas virtuel.
> 2) Dans le fichier .h lié > > # define ID3_STRUCT(S) struct S
Les defines sont à éviter et celui-ci est particulièrement inutile.
<snip>
> 3) Dans le constructeur de ma classe : > > m_MpegHeader = new Mp3_Headerinfo();
ok
> 4) Dans le destructeur : > > Rien justement sinon çà plante ...
Si ta classe A utilise new dans son constructeur, il devrait y avoir un delete dans son destructeur (à moins de le faire ailleurs) et celui-ci doit être virtuel si tu utilises une classe B dérivée de A.
Sinon, premièrement ton protected: est inutile puisque rien en dérive et deuxièmement, tu devrais avoir un new dans le ctor et un delete dans le dtor (encore, si c'est là que tu le delete).
De plus, poste du code qui *compile*, qu'on puisse vérifier quelque chose.
Bonne journée,
Jonathan Mcdougal Montréal, Québec mcdougalljonathan@hotmail.com http://www.multimania.com/utopiasoftware
|
|
lundi 10 février 2003 à 07:07:06 |
Re : memory leak sur const MyStrut* MyStruct

jonathanmcdougall
|
> Bonjour, > tu as ta réponse je crois > > évite de déclarer const un pointeur sur une zone que tu compte détruire par delete > > maStruct *s = new maStruct; et delete s; OK > const maStruct *s = new maStruct; et delete s; KO
À ma connaissance, deleter un pointer const est correct et même nécessaire. La constance d'un pointeur ne concerne pas sa destruction, mais bien sa vie. Une recherche rapide dans le standard ne m'a rien donnée, si tu pouvais éclairer ma lanterne...
const int *p = new int; //memory leak assuré?
Jonathan Mcdougal Montréal, Québec mcdougalljonathan@hotmail.com http://www.multimania.com/utopiasoftware
|
|
lundi 10 février 2003 à 09:33:22 |
Re : memory leak sur const MyStrut* MyStruct

vieuxLion
|
Tu as raison, désolé je reformule const maStruct * s déclare un pointeur sur const maStruct* const s déclare un pointeur const et c'est celui là qu'il convient d'utiliser
------------------------------- Réponse au message : -------------------------------
> > > Bonjour, > > tu as ta réponse je crois > > > > évite de déclarer const un pointeur sur une zone que tu compte détruire par delete > > > > maStruct *s = new maStruct; et delete s; OK > > const maStruct *s = new maStruct; et delete s; KO > > À ma connaissance, deleter un pointer const est correct et même nécessaire. La constance d'un pointeur ne concerne pas sa destruction, mais bien sa vie. Une recherche rapide dans le standard ne m'a rien donnée, si tu pouvais éclairer ma lanterne... > > const int *p = new int; //memory leak assuré? > > Jonathan Mcdougal > Montréal, Québec > mcdougalljonathan@hotmail.com > http://www.multimania.com/utopiasoftware > >
|
|
lundi 10 février 2003 à 14:45:00 |
Re : memory leak sur const MyStrut* MyStruct

jonathanmcdougall
|
> Tu as raison, désolé > je reformule > const maStruct * s déclare un pointeur sur const > maStruct* const s déclare un pointeur const et c'est celui là qu'il convient d'utiliser
int *const p = new int; delete p; // ok
const int *p2 = new int; delete p2; // ok
const int *const p3 = new int; delete p3; // ok
En tout cas à ma connaissance.
-- Jonathan Mcdougal Montréal, Québec mcdougalljonathan@hotmail.com http://www.multimania.com/utopiasoftware
|
|
Cette discussion est classée dans : const, memory, leak, mystruct, mystrut
Répondre à ce message
Sujets en rapport avec ce message
_tempnam & memory leak [ par magic_Nono ]
ceci n'est pas une question mais juste une info, qui vous éviteras peut etre de perdre du temps résultat de 2 h de recherche d'un memory leak le pro
wchar [ par xterminhate ]
j'ai un objet de type ( const wchar_t * ). Je voudrais passer cet objet en paramètre d'une fonction f( const char * ). Existe-t-il une fonction de co
convertir AnsiString vers const char * HELP [ par alexsierro ]
[C++ Erreur] Unit1.cpp(22): E2034 Impossible de convertir 'AnsiString' en 'const char *' Je ne parvient pas à utiliser un texte d'un edit(AnsiString)
Erreur incomprise [ par Bason_sensei ]
// User.h #ifndef _USER_H_ #define _USER_H_ #include using namespace std; #include "FileUser.h" class User{ public : User();<
Read Memory [ par e0091 ]
Salut a tous j'aimerais savoir quel est la formule pour que je puisse lire et ecrire dans la memoire d'un jeu?
erreur de compilation [ par cpp_devlopper ]
bonjour,je suis un nouvel utilisateue de Microsoft visual studio, je l'ai essayé avec un programme "point.cpp"mais quand je le compile il ne reconnait
Convertir unsigned long en const char * [ par sman0 ]
bonjour je cherche a convertir un unsigned long en char pour l'afficher dans une MessageBox comment puis-je proceder ?
Fonction à nbr d'arguments variable [ par Xilofeon ]
Bonjour. Alors gros problème.J'utilise des fonctions à nombres variables d'arguments. Alors je vais vous montré le code est expliqué aprés car je vo
un vector d'objet qui refuse d'être const pour utiliser les méthodes de l'objet [ par Icarius44 ]
Struct array en argument [ par Gabi ]
J'ai un problème avec les arrays de struct en argument (o rly ?). Quand j'en passe un, la valeur que cela donne dans la fonction n'est pas correcte (m
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|