Probleme perte de mémoire - Chilkat [Résolu]

Signaler
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010
-
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010
-
Bonjour, je suis débutant en c++ et j'éssaye d'utiliser les librairies chilkat Http  et CkStringArray, je récupere des parametres situés sur un site internet grace à la librairie Chilkat HTTP et je souhaite  les mettres dans un tableau avec la fonction Split de C String et j'ai fait une boucle for pour actualiser les parametres mais mon code à un probleme de perte de mémoire assé important et je ne sais pas comment le régler.
Désolé si je ne suis pas trop clair, je suis débutant, mais n'hésitez pas à poser des questions !

mon code : Chilkat.rar http://chouquette.fr/Fichiers/Probleme Chilkat.rar (j'ai mis les librairies dans le rar avec les sources)
la doc des librairies Chilkat : http://www.chilkatsoft.com/refdoc/cpp.asp
des exemples de codes Chilkat : http://www.example-code.com/vcpp/http.asp
 
Merci d'avance !
Chouquette.

9 réponses

Messages postés
65
Date d'inscription
vendredi 10 février 2006
Statut
Membre
Dernière intervention
21 octobre 2009

Dans ta fonction ChilkatSample, tu ne libére jamais tes variables allouées dynamiquements.
En C++, tu doit utiliser delete.
Ce qui explique ton enorme fuite de memoire.
Bye
Messages postés
65
Date d'inscription
vendredi 10 février 2006
Statut
Membre
Dernière intervention
21 octobre 2009

tu n'as pas a utiliser :
delete[] &req;
delete[] &html;
Car ce ne sont pas des variables gérer dynamiquement.
le programme alloue de la place en debut de fonction et la désalloue à la fin sans avoir besoin de la faire.
Sinon je devellope presque uniquement en C donc je ne peut pas plus t'aider.
Désolé.
Bye
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Pour libérer une classe on utilise delete sans []

delete ParamArray;
delete resp;
delete http;

C++ (@++)<!--
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

Sinon si vous voici le code contenu dans le fichier rar si vous préférez :

#include <windows.h>
#include

#include <../include/CkHttpRequest.h>
#include <../include/CkHttp.h>
#include <../include/CkHttpResponse.h>
#include <../include/CkStringArray.h>
#include <../include/CkString.h>

using namespace std;
char url_server[] = "localhost";
char http_req_path[] = "params.php";
char Identifiant[] = "Identifiant - Test";

CkStringArray *ParamArray;
void ChilkatSample(void)
{
    CkHttpRequest req;
    CkHttp *http = new CkHttp;
    CkHttpResponse *resp = new CkHttpResponse;
    CkString html;

    http->UnlockComponent("Http-TEAMBEAN_3E70D502146I");
    req.UsePost();
    req.put_Path(http_req_path);
    req.AddParam("Identifiant",Identifiant);
    resp = http->SynchronousRequest(url_server,80,false,req);
    html = resp->bodyStr();
    ParamArray = html.split('|',true,true,false);

}

int main( void ) {

    for(int i=0;i<100000; i++)
    {
        ChilkatSample();
    }
    system("pause");
}
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

merci, j'ai éssayé mais il me met :

Debug Assertion Failed!

Program:c:\......\Projet.exe
File:dbgdel.cpp
Line:52

Expression:_Block_Type_IS_VALID(pHead->nBlockUse)

voici ce que j'ai fait :

void ChilkatSample(void)
{
    CkStringArray *ParamArray;
    CkHttpRequest req;
    CkHttp *http = new CkHttp;
    CkHttpResponse *resp = new CkHttpResponse;
    CkString html;

    http->UnlockComponent("Http-TEAMBEAN_3E70D502146I");
    req.UsePost();
    req.put_Path(http_req_path);
    req.AddParam("Identifiant",Identifiant);
    resp = http->SynchronousRequest(url_server,80,false,req);
    html = resp->bodyStr();
    ParamArray = html.split('|',true,true,false);

    delete[] ParamArray;
    delete[] &req;
    delete[] &http;
    delete[] resp;
    delete[] &html;

}
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

j'ai cherché un peu pour ce message d'erreur et j'ai trouvé la réponse ici : http://www.developpez.net/forums/showthread.php?t=89973
mais maintenant j'ai un autre message d'érreur si je fait un delete[] &http; sinon les autres delete[] fonctionne mais quand je l'éffectu sur la variable http j'ai ce message :
Exception non gérée à 0x770459c3 dans Projet.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xe72fc37d.

merci .
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

Ok merci beaucoup pour ton aide ! mais j'ai toujours le probleme quand je met un delete[] http; ca me fait toujours la meme erreur et si je ne met pas delete [] http, j'ai une fuitte de mémoire ..
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

maintenant ca fonctionne ! merci beaucoup pour ton aide, finalement je n'ai pas fait de delete http j'ai juste fait

    delete[] ParamArray;
    delete[] resp;

et ca fonctionne alors que avant quand je mettait pas delete http ca faisait une fuite de mémoire, maintenant je le met pas ca fait plus rien ! merci beaucoup tu m'a vraiement bien aidé !
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

ok merci !