J'ai une fuite de mémoire vraiment étrange dans un programme. J'ai une fonction que si j'éxécute son code, il n'y a aucun problème. Mais si j'exécute en boucle un appel de cette fonction c'est là que j'ai une fuite. Quelqu'un a une idée? Voici le code en question:
void 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
# Oubliez!
Posté par WildChild . Évalué à 2.
[^] # Re: Oubliez!
Posté par TazForEver . Évalué à 3.
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 . Évalué à 1.
[^] # Re: Oubliez!
Posté par TazForEver . Évalué à 1.
[^] # Re: Oubliez!
Posté par WildChild . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.