Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Burel
"Jean-François GAZET" wrote in message news:bljd8k$8u1$
Bonjour,
j'ai une fuite mémoire an quittant mon programme sous VC++6.0 :
Resource leak: allocated by RegisterClassA in d:tralalapouetmain.cpp (706), HANDLE: 0x0000C1F5
Le problème vient du code suivant inclus dans une fonction : WNDCLASS wc; ... RegisterClass(&wc)
Je pense que c'est à cause de la classe wc qui n'est pas détruite mais
c'est
pourtant une variable locale à la fonction.
c'est votre variable qui est locale, pas l'objet auquel elle s'attache. En outre cette variable structurée ne représente pas la class mais les paramètres de la création de cette classe. Si donc, vous avez demandé au systeme de créer une classe, alors il faut lui demander de la détruire quand vous n'en avez plus besoin.
Est-ce qu'on doit faire quelque chose comme UnRegisterClass(&wc) ou DeleteObject(wc) ? (mais bien sûr ceci ne marche pas).
comme le montre le proto ci-dessous BOOL UnregisterClass( LPCTSTR lpClassName, // class name HINSTANCE hInstance // handle to application instance );
pour détuire une classe , il faut son nom et l'hinstance de l'application où elle a été créée. REM : il n'est pas nécessaire de faire un UnregisterClass pour la fenêtre principale de l'application.
VB
"Jean-François GAZET" <jf.gazet@eltitec.com> wrote in message
news:bljd8k$8u1$1@news-reader1.wanadoo.fr...
Bonjour,
j'ai une fuite mémoire an quittant mon programme sous VC++6.0 :
Resource leak: allocated by RegisterClassA in d:tralalapouetmain.cpp
(706), HANDLE: 0x0000C1F5
Le problème vient du code suivant inclus dans une fonction :
WNDCLASS wc;
...
RegisterClass(&wc)
Je pense que c'est à cause de la classe wc qui n'est pas détruite mais
c'est
pourtant une variable locale à la fonction.
c'est votre variable qui est locale, pas l'objet auquel elle s'attache. En
outre cette variable structurée ne représente pas la class mais les
paramètres de la création de cette classe. Si donc, vous avez demandé au
systeme de créer une classe, alors il faut lui demander de la détruire quand
vous n'en avez plus besoin.
Est-ce qu'on doit faire quelque chose comme UnRegisterClass(&wc) ou
DeleteObject(wc) ? (mais bien sûr ceci ne marche pas).
comme le montre le proto ci-dessous
BOOL UnregisterClass(
LPCTSTR lpClassName, // class name
HINSTANCE hInstance // handle to application instance
);
pour détuire une classe , il faut son nom et l'hinstance de l'application où
elle a été créée.
REM : il n'est pas nécessaire de faire un UnregisterClass pour la fenêtre
principale de l'application.
"Jean-François GAZET" wrote in message news:bljd8k$8u1$
Bonjour,
j'ai une fuite mémoire an quittant mon programme sous VC++6.0 :
Resource leak: allocated by RegisterClassA in d:tralalapouetmain.cpp (706), HANDLE: 0x0000C1F5
Le problème vient du code suivant inclus dans une fonction : WNDCLASS wc; ... RegisterClass(&wc)
Je pense que c'est à cause de la classe wc qui n'est pas détruite mais
c'est
pourtant une variable locale à la fonction.
c'est votre variable qui est locale, pas l'objet auquel elle s'attache. En outre cette variable structurée ne représente pas la class mais les paramètres de la création de cette classe. Si donc, vous avez demandé au systeme de créer une classe, alors il faut lui demander de la détruire quand vous n'en avez plus besoin.
Est-ce qu'on doit faire quelque chose comme UnRegisterClass(&wc) ou DeleteObject(wc) ? (mais bien sûr ceci ne marche pas).
comme le montre le proto ci-dessous BOOL UnregisterClass( LPCTSTR lpClassName, // class name HINSTANCE hInstance // handle to application instance );
pour détuire une classe , il faut son nom et l'hinstance de l'application où elle a été créée. REM : il n'est pas nécessaire de faire un UnregisterClass pour la fenêtre principale de l'application.
VB
Jean-François GAZET
> > j'ai une fuite mémoire an quittant mon programme sous VC++6.0 : > Resource leak: allocated by RegisterClassA in d:tralalapouetmain.cpp > (706), HANDLE: 0x0000C1F5 > Le problème vient du code suivant inclus dans une fonction : > WNDCLASS wc; > ... > RegisterClass(&wc)
comme le montre le proto ci-dessous BOOL UnregisterClass( LPCTSTR lpClassName, // class name HINSTANCE hInstance // handle to application instance ); pour détuire une classe , il faut son nom et l'hinstance de l'application
où
elle a été créée. REM : il n'est pas nécessaire de faire un UnregisterClass pour la fenêtre principale de l'application.
Pourtant j'ai bien le code suivant à la fermeture de la fenêtre :
if (!UnregisterClass("zOpenGL",hInstance)) { MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); hInstance=NULL; }
La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
> > j'ai une fuite mémoire an quittant mon programme sous VC++6.0 :
> Resource leak: allocated by RegisterClassA in d:tralalapouetmain.cpp
> (706), HANDLE: 0x0000C1F5
> Le problème vient du code suivant inclus dans une fonction :
> WNDCLASS wc;
> ...
> RegisterClass(&wc)
comme le montre le proto ci-dessous
BOOL UnregisterClass(
LPCTSTR lpClassName, // class name
HINSTANCE hInstance // handle to application instance
);
pour détuire une classe , il faut son nom et l'hinstance de l'application
où
elle a été créée.
REM : il n'est pas nécessaire de faire un UnregisterClass pour la fenêtre
principale de l'application.
Pourtant j'ai bien le code suivant à la fermeture de la fenêtre :
if (!UnregisterClass("zOpenGL",hInstance)) {
MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK |
MB_ICONINFORMATION);
hInstance=NULL;
}
La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
> > j'ai une fuite mémoire an quittant mon programme sous VC++6.0 : > Resource leak: allocated by RegisterClassA in d:tralalapouetmain.cpp > (706), HANDLE: 0x0000C1F5 > Le problème vient du code suivant inclus dans une fonction : > WNDCLASS wc; > ... > RegisterClass(&wc)
comme le montre le proto ci-dessous BOOL UnregisterClass( LPCTSTR lpClassName, // class name HINSTANCE hInstance // handle to application instance ); pour détuire une classe , il faut son nom et l'hinstance de l'application
où
elle a été créée. REM : il n'est pas nécessaire de faire un UnregisterClass pour la fenêtre principale de l'application.
Pourtant j'ai bien le code suivant à la fermeture de la fenêtre :
if (!UnregisterClass("zOpenGL",hInstance)) { MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); hInstance=NULL; }
La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
Mickael Pointier
> La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
Problème de joint ? Avec les ennuis de Valve, ca commence à en faire des fuites !
Mike (désolé)
> La fuite serait donc celle de la fenêtre principale ? c'est
inévitable ?
Problème de joint ?
Avec les ennuis de Valve, ca commence à en faire des fuites !
> La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
Problème de joint ? Avec les ennuis de Valve, ca commence à en faire des fuites !
Mike (désolé)
Frédéri MIAILLE
"Jean-François GAZET" a écrit dans le message de news:bljm3f$jsp$
> > j'ai une fuite mémoire an quittant mon programme sous VC++6.0 : > > Resource leak: allocated by RegisterClassA in
d:tralalapouetmain.cpp
> > (706), HANDLE: 0x0000C1F5 > > Le problème vient du code suivant inclus dans une fonction : > > WNDCLASS wc; > > ... > > RegisterClass(&wc)
> comme le montre le proto ci-dessous > BOOL UnregisterClass( > LPCTSTR lpClassName, // class name > HINSTANCE hInstance // handle to application instance > ); > pour détuire une classe , il faut son nom et l'hinstance de
l'application
où > elle a été créée. > REM : il n'est pas nécessaire de faire un UnregisterClass pour la
fenêtre
> principale de l'application.
Pourtant j'ai bien le code suivant à la fermeture de la fenêtre :
if (!UnregisterClass("zOpenGL",hInstance)) { MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); hInstance=NULL; }
La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
Un truc bête : J'ai eu ce genre de problème une fois (enfin sensiblement différent). J'avais mon WndProc et son switch interne. En default de switch, j'avais le DefaultWndProc qui gérait les choses non gérées. Seulement, problème, je ne renvoyais pas 0 dans certains case. Notamment à mon ON_CLOSE ou ON_DESTROY. Total : ON_CLOSE arrive, je détruit ma fenêtre mais je ne renvoie pas 0. Alors un dernier passage dans le WndProc devait se produire et ma fenêtre est déjà détruite mais le programme ordonne sa destruction en prenant le default et donc le DefaultWndProc ce qui avait pour effet de détruire une fenêtre déjà détruite.
"Jean-François GAZET" <jf.gazet@eltitec.com> a écrit dans le message de
news:bljm3f$jsp$1@news-reader3.wanadoo.fr...
> > j'ai une fuite mémoire an quittant mon programme sous VC++6.0 :
> > Resource leak: allocated by RegisterClassA in
d:tralalapouetmain.cpp
> > (706), HANDLE: 0x0000C1F5
> > Le problème vient du code suivant inclus dans une fonction :
> > WNDCLASS wc;
> > ...
> > RegisterClass(&wc)
> comme le montre le proto ci-dessous
> BOOL UnregisterClass(
> LPCTSTR lpClassName, // class name
> HINSTANCE hInstance // handle to application instance
> );
> pour détuire une classe , il faut son nom et l'hinstance de
l'application
où
> elle a été créée.
> REM : il n'est pas nécessaire de faire un UnregisterClass pour la
fenêtre
> principale de l'application.
Pourtant j'ai bien le code suivant à la fermeture de la fenêtre :
if (!UnregisterClass("zOpenGL",hInstance)) {
MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK |
MB_ICONINFORMATION);
hInstance=NULL;
}
La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
Un truc bête :
J'ai eu ce genre de problème une fois (enfin sensiblement différent).
J'avais mon WndProc et son switch interne.
En default de switch, j'avais le DefaultWndProc qui gérait les choses non
gérées.
Seulement, problème, je ne renvoyais pas 0 dans certains case.
Notamment à mon ON_CLOSE ou ON_DESTROY. Total :
ON_CLOSE arrive, je détruit ma fenêtre mais je ne renvoie pas 0.
Alors un dernier passage dans le WndProc devait se produire et ma fenêtre
est déjà détruite mais le programme ordonne sa destruction en prenant le
default et donc le DefaultWndProc ce qui avait pour effet de détruire une
fenêtre déjà détruite.
"Jean-François GAZET" a écrit dans le message de news:bljm3f$jsp$
> > j'ai une fuite mémoire an quittant mon programme sous VC++6.0 : > > Resource leak: allocated by RegisterClassA in
d:tralalapouetmain.cpp
> > (706), HANDLE: 0x0000C1F5 > > Le problème vient du code suivant inclus dans une fonction : > > WNDCLASS wc; > > ... > > RegisterClass(&wc)
> comme le montre le proto ci-dessous > BOOL UnregisterClass( > LPCTSTR lpClassName, // class name > HINSTANCE hInstance // handle to application instance > ); > pour détuire une classe , il faut son nom et l'hinstance de
l'application
où > elle a été créée. > REM : il n'est pas nécessaire de faire un UnregisterClass pour la
fenêtre
> principale de l'application.
Pourtant j'ai bien le code suivant à la fermeture de la fenêtre :
if (!UnregisterClass("zOpenGL",hInstance)) { MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); hInstance=NULL; }
La fuite serait donc celle de la fenêtre principale ? c'est inévitable ?
Un truc bête : J'ai eu ce genre de problème une fois (enfin sensiblement différent). J'avais mon WndProc et son switch interne. En default de switch, j'avais le DefaultWndProc qui gérait les choses non gérées. Seulement, problème, je ne renvoyais pas 0 dans certains case. Notamment à mon ON_CLOSE ou ON_DESTROY. Total : ON_CLOSE arrive, je détruit ma fenêtre mais je ne renvoie pas 0. Alors un dernier passage dans le WndProc devait se produire et ma fenêtre est déjà détruite mais le programme ordonne sa destruction en prenant le default et donc le DefaultWndProc ce qui avait pour effet de détruire une fenêtre déjà détruite.