Probleme perte de mémoire - Chilkat

Résolu
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010 - 4 août 2008 à 14:51
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010 - 4 août 2008 à 21:04
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

Cyr62110 Messages postés 65 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 21 octobre 2009
4 août 2008 à 15:50
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
3
Cyr62110 Messages postés 65 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 21 octobre 2009
4 août 2008 à 17:21
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
4 août 2008 à 18:29
Pour libérer une classe on utilise delete sans []

delete ParamArray;
delete resp;
delete http;

C++ (@++)<!--
3
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010
4 août 2008 à 15:00
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");
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010
4 août 2008 à 16:18
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;

}
0
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010
4 août 2008 à 16:42
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 .
0
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010
4 août 2008 à 17:44
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 ..
0
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010
4 août 2008 à 17:58
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é !
0
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010
4 août 2008 à 21:04
ok merci !
0
Rejoignez-nous