Retourner aux forums || Retourner au forum Programmation.c++
Programmation.c++ : Fuite de mémoire avec la classe
Posté par WildChild (page perso, ) le 12 juillet 2004void mIMEOnlineManager::SetUsername(unsigned int iUser, const char *cUsername) {
mIMEDatabase mdCheckUser;
string sMsg;
if (!mdCheckUser.CheckUser(cUsername)) {
sMsg = mIME::CreateDisconnectMsg(ERRUSERNOTFOUND);
mscMainSocketManager->SendText(iUser, sMsg.c_str(), sMsg.length());
mscMainSocketManager->ShutdownConnection(iUser);
}
else {
mIMEClientsListByUser[iUser]->sUsername = cUsername;
sMsg = "" + mIME::CreateRandomString() + ""
+ mIME::CreateRandomString() + "";
mscMainSocketManager->SendText(iUser, sMsg.c_str(), sMsg.length());
}
}
Si je place le bloc if/else dans un while (true) ça ne fuit pas.
Voici le code d'appel de cette fonction:
if (!strcmp(xcParams[i], "username")) {
momOnlineSystem->SetUsername(iCurrentDataUser, xcParams[i + 1]);
}
xcParams est de type XML_Char (C'est comme un pointeur char*, j'utilise expat pour parser du XML).
Si je place ce if dans un while (true) la mémoire monte sans arrêt!
Quelqu'un a une idée?
Merci
Gabriel Lavoie
> Lire le message (5 commentaires, moyenne: 1,6).
Oubliez!
Une gaffe de ma part! Le leak se trouve ailleur...
-
[^]Re: Oubliez!
Posté par TazForEver () le 12/07/2004 à 06:05. (lien). Évalué à 3.au passage, tu ferais bien d'utiliser encore plus les std::string
petite erreur
sMsg.c_str(), sMsg.length()
manqué : strlen(sMsg.c_str()) <= sMsg.length()
préfère
sMsg.data() qui n'est pas limité par un '\0', les std::string pouvant contenir tout char. c'est donc préférable dans un contexte non-ASCII-
[^]Re: Oubliez!
Posté par WildChild (page perso, ) le 12/07/2004 à 10:46. (lien). Évalué à 1.Petite question sinon, est-ce que c'est possible d'utiliser la classe string entre une app et un dll/so (win/linux)? J'avais essayé un exemple simple que le dll retournait une string et ça fuyait à mort! le même exemple ne fuyait pas si ma fonction était directement dans le programme.
-
[^]Re: Oubliez!
Posté par TazForEver () le 12/07/2004 à 18:36. (lien). Évalué à 1.c'est sans doute parce que les versions de std::string sont différentes ... à moins que j'ai rien compris aux sombres conneries des DLL ou il que la DLL désalloue elle même la mémoire qu'elle a allouée
-
[^]Re: Oubliez!
Posté par WildChild (page perso, ) le 12/07/2004 à 19:21. (lien). Évalué à 1.Le DLL est l'exécutable sont compilés avec le même compilateur (MinGW - GCC 3.4).
-
-
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c++



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.