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

cs_SuperChouquette 37 Messages postés dimanche 24 février 2008Date d'inscription 18 mai 2010 Dernière intervention - 4 août 2008 à 14:51 - Dernière réponse : cs_SuperChouquette 37 Messages postés dimanche 24 février 2008Date d'inscription 18 mai 2010 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Cyr62110 65 Messages postés vendredi 10 février 2006Date d'inscription 21 octobre 2009 Dernière intervention - 4 août 2008 à 15:50
3
Merci
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

Merci Cyr62110 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de Cyr62110
Meilleure réponse
Cyr62110 65 Messages postés vendredi 10 février 2006Date d'inscription 21 octobre 2009 Dernière intervention - 4 août 2008 à 17:21
3
Merci
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

Merci Cyr62110 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de Cyr62110
Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 4 août 2008 à 18:29
3
Merci
Pour libérer une classe on utilise delete sans []

delete ParamArray;
delete resp;
delete http;

C++ (@++)<!--

Merci SAKingdom 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de SAKingdom
cs_SuperChouquette 37 Messages postés dimanche 24 février 2008Date d'inscription 18 mai 2010 Dernière intervention - 4 août 2008 à 15:00
0
Merci
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");
}
Commenter la réponse de cs_SuperChouquette
cs_SuperChouquette 37 Messages postés dimanche 24 février 2008Date d'inscription 18 mai 2010 Dernière intervention - 4 août 2008 à 16:18
0
Merci
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;

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.