IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Liberation de la memoire en Multi-Thread


Sujet :

C++

  1. #21
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    ou mieux encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (fileName != "NOP")
            {
                cout << "File received, current processing file !" << endl;
                pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
                pData->fileNameLink = strdup(fileName.c_str());
                hThread = CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
                CloseHandle(hThread);
            }
    Ca evite d'avoir le fileNameChar

  2. #22
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Effectivement, c'est mieux !
    Ca donne quoi alors maintenant?

  3. #23
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Toujours des fuites de mémoires mais le code me plait dejà beaucoup plus...
    Je pense que j'ai des fonctions dans mon code qui merdouille....

  4. #24
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Il faut que tu regardes à chaque fois que tu utilises à pointeur.
    A part ça, je sais pas trop quoi te dire

  5. #25
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Pfiou...faut que je reprenne tout mon code moi... aller je m'y met, je te tiens au courant et merci encore pour ton aide!

  6. #26
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    ha si une question (ou deux) :
    Quand on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FILE *file;
    file = fopen(fileName.c_str(), "rb");
    fclose(file);
    faut il faire appres : ?

  7. #27
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Là je n'ai pas la réponse avec certitude, mais à priori je dirais que non, tu n'as pas besoin de faire le delete et que le fclose fait tout ce qu'il faut.
    A vérifier

  8. #28
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Non.

    De plus, il ne faut pas faire le fclose() si fopen() a renvoyé NULL:
    free(NULL) est garanti ne rien faire, mais fclose(NULL) est un comportement indéfini (et pour cette raison, plante exprès sous Visual 2005).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #29
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    et dans un cas comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
        char *maxSoftsTmp = c_inifile_get_string("SOFTS", "TOTAL", NULL);
        maxSofts = strtol(maxSoftsTmp, NULL, 0);
    }

  10. #30
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    C'est marqué dans la doc
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #31
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    OUPS!
    ça t'apprendra verbal à pas lire les docs!

  12. #32
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    J'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (x <= maxSofts)
            {
                char ch[3];
                sprintf(ch, "%d", x);
                listSofts[x-1] = c_inifile_get_string("SOFTS", ch, NULL);
                x++;
            }
    J'ai voulu faire un mais ça plante
    Je pense devoir utiliser :
    Mais la difference avec free() ?


    edito :
    pour eviter le char ch[3] si je mets ça ça va? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (x <= maxSofts)
            {
                listSofts[x-1] = c_inifile_get_string("SOFTS", (const char*) x, NULL);
                x++;
            }
    mais ça plante avec ça...

  13. #33
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    le char ch[3], aucun problème, il est sur la pile et n'est pas utilisé après le while.

    Par contre:
    • On ne sait pas comment est alloué listSofts
    • Il faut supprimer les éléments de listSofts comme suit:
      Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      for(int iSoft=0 ; iSoft<maxSofts ; iSoft++)
      {
      	free(listSofts[iSoft]), listSofts[iSoft]=NULL;
      }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #34
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Allocation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    string listSofts[maxSofts];
            while (x <= maxSofts)
            {
                char ch[3];
                sprintf(ch, "%d", x);
                listSofts[x-1] = c_inifile_get_string("SOFTS", ch, NULL);
                x++;
            }

  15. #35
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Alors là, problème: Le char* retourné par c_inifile_get_string est perdu dans la boucle même.
    Change-là ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    string listSofts[maxSofts];
    for(x=1 ; x<=maxSofts ; x++)
    {
    	char ch[3];
    	sprintf(ch, "%d", x);
    	char * iniStr = c_inifile_get_string("SOFTS", ch, NULL);
    	listSofts[x-1] = iniStr;
    	free(iniStr);
    }
    Et tu n'auras rien à faire pour supprimer, puisque le tableau est sur la pile.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #36
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Merci encore médinoc, peux tu m'expliquer un tout petit plus (ouai j'aime bien quand ça marche mais je prefere encore mieux comprendre).
    Tu me dis que le tableau est dans la "pile"... mais le tableau est initialisé avant le { par string ...

  17. #37
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Ben c'est un tableau de maxSoft objets std::string, tous dans la pile.
    Typiquement, chaque objet string doit contenir un pointeur vers ses données, elles allouées sur le tas...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #38
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Ok merci pour vos explications ça m'aide vraiment.
    Par contre j'ai toujours des fuites moi (je parle de mémoire là hein...)

  19. #39
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Jette un oeil du côté de DEBUG_NEW pour t'aider à savoir d'où tes fuites () viennent.

  20. #40
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    merci pour l'info mais je n'arrive pas à l'utiliser, je travail sous code::blocks, ming pour la compilation et gdb comme debugger (que je ne sais vraiment pas utiliser...)

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 10h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 19h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 12h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 13h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo