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 2004
0
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

> Lire le message (5 commentaires, moyenne: 1,6).  

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.

Oubliez!

Posté par WildChild (page perso, ) le 12/07/2004 à 02:45. (lien). Évalué à 2.

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++