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 :

problème Libération de mémoire sur tableau de point


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut [resolu] problème Libération de mémoire sur tableau de point
    Bonjour,

    Je tourne en rond, je ne comprends pas pourquoi je n'arrive pas à libérer les espaces mémoires que j'ai alloué.
    Je vous explique :

    j'ai une strucure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct descriptif {
    	int intNbChampsCle;//nombre d'indice du tableau de pointeur
    	char **chrChampsCle;
    };
    Je déclare une variable de type structure descriptif et un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct descriptif desc_ref,*ptrDesc_ref;
    j'affecte à mon pointeur l'adresse de ma variable
    je passe à une fonction mon pointeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F_descriptif(ptrDesc_ref,1);
    dont le prototype est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void F_descriptif(struct descriptif *desc,int type)
    dans cette fonction j'alloue la mémoire et suivant un compteur je réalloue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(desc->chrChampsCle == NULL) {
    	if ((desc->chrChampsCle=(char **)calloc( intNbChamp + 1, sizeof (char *))) == NULL) {
    	    fprintf(stderr,"PROBLEME d'allocation de memoire [desc->chrChampsCle]\n");
    	    exit (1);
    	}
    } else {
    	if ((desc->chrChampsCle=(char **)realloc(desc->chrChampsCle,sizeof (char *) * (intNbChamp + 1))) == NULL) 	{
    		fprintf(stderr,"PROBLEME d'allocation de memoire [desc->chrChampsCle]\n");
    		exit (1);
    	}
    }
    puis je récupère à l'indice précisé par le compteur un pointeur sur une chaine via une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    desc->chrChampsCle[intNbChamp]=ExtractChaine(ptrChrBufferLect,ptrTemp);
    ce que fait la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    char * ExtractChaine(char *debut,char *fin) {
    	int intIndice;
    	int intLongueur;
    	char *ptrChrRetour;
     
    	intIndice=0;
    	intLongueur=fin-debut;
     
    	if ((ptrChrRetour = (char *) calloc(intLongueur+1,T_CHAR)) == NULL)
        {
            fprintf(stderr,"PROBLEME d'allocation de memoire [ptrChrRetour]\n");
            exit (1);
        }
     
    	for(intIndice=0;intIndice < intLongueur;intIndice++) {
    		ptrChrRetour[intIndice]=debut[intIndice];
    	}
    	ptrChrRetour[intIndice]='\0';
     
    	return ptrChrRetour;
    }

    à la fin je libère les allocation faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	for(intCompteur=0;intCompteur < desc_ref.intNbChampsCle;intCompteur++) {
    		if(desc_ref.chrChampsCle[intCompteur] != NULL) {
    			free(desc_ref.chrChampsCle[intCompteur]);
    		}
    	}
     
    	free(desc_ref.chrChampsCle);
    La fonction F_descriptif est utilisé 2 fois, la libération pour la 1ère utilisation fonctionne bien mais quand je termine la libération du dernier indice de la seconde utilisation j'ai une erreur :
    unhandled exception in monProg.exe : 0xC0000005 Access violation
    Merci d'avance pour votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Pourrai tu me preciser la difference en calloc et alloc? stp

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par kalifornication
    Pourrai tu me preciser la difference en calloc et alloc? stp
    calloc fait un malloc et un memset pour initialiser l'espace mémoire.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 31
    Points
    31
    Par défaut Re: problème Libération de mémoire sur tableau de pointeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	for(intCompteur=0;intCompteur < desc_ref.intNbChampsCle;intCompteur++) {
    		if(desc_ref.chrChampsCle[intCompteur] != NULL) {
    			free(desc_ref.chrChampsCle[intCompteur]);
    		}
    	}
    ici tu efface ce que tu as créé dynamiquement (calloc et malloc) or tu as bien créé une sructure en dur (struct decriptif desc_ref) or avec cette ligne tu essai de l'effacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	free(desc_ref.chrChampsCle);
    je pense que ton erreur vient de la derniere ligne parceque tu essai d'effacer ton pointeur de pointeur qui a été créé avec la structure et nom dynamiquement. ce pointeur disparaitra en meme temps que la structure.Si elle a ete créée en static elle sera detruite en meme temps que le programme. Si elle a ete faite en dynamique il faut detruire la structure entiere et non juste le pointeur.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    sesolé si mon explication est un peu brouillon. n'hesite pas a demender si besoin.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Re: problème Libération de mémoire sur tableau de pointeur
    Citation Envoyé par kalifornication
    je pense que ton erreur vient de la derniere ligne parceque tu essai d'effacer ton pointeur de pointeur qui a été créé avec la structure et nom dynamiquement. ce pointeur disparaitra en meme temps que la structure.Si elle a ete créée en static elle sera detruite en meme temps que le programme. Si elle a ete faite en dynamique il faut detruire la structure entiere et non juste le pointeur.
    Je n'arrive même pas sur la dernière ligne.
    L'erreur survient quand je libère le deuxième et dernier indice de mon tableau dans la structure dans la boucle for.

    Je soupçonne ma fonction ExtractChaine, et c'est là que je pêche.

    Est-ce qu'en faisant mon calloc dans cette fonction je récupère bien mon pointeur sur cette allocation.

    J'ai tulisé cette méthode avec d'autres tableaux, et j'ai peur que le contexte fasse que je crois que cela marche mais qu'en réalité je pointe sur les bonnes valeurs par hasard.
    Pour te dire ou j'en suis


  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    tu pourai mettre le code en entier que je puisse le tester...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par kalifornication
    tu pourai mettre le code en entier que je puisse le tester...
    Le problème est qu'il y a pas mal de fichier et quelques centaines de lignes de code.
    Ce n'est qu'une petite partie du code principal.

    Cela fonctionnait avant que je fasse une modification mais qui ne concernait pas cette structure.

    J'avais 2 autres tableaux que j'alloue à la première utilisation puis par realloc suivant un PAS définit.
    J'ai changé cela en ne faisant qu'un seul calloc sans realloc derrière.
    Je ne vois pas le lien si ce n'est le contexte dont je te parlais avant.

  9. #9
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Si tu fais un realloc, la zone memoire nouvellement allouee n'est pas remplie de zeros (donc de NULL pour les char *). Donc a la fin, ton test n'est pas bon.

    Sinon, un realloc(NULL,...) est equivalent a un malloc. Donc tu peux changer ton test, et faire uniquement un realloc, suivit d'une mise a NULL de tous la zone memoire nouvellement acquise.

    Si ca ne resoud pas tout, tu peux essayer memwatch (lien poste dans d'autre thread), si ca marche tjrs pas, mets le code en entier (enfin, si c'est pas trop trop long non plus.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * ExtractChaine(char *debut,char *fin)
    les 2 parametres (debut et fin)que tu envoi sont 2 pointeur sur carateres qui correspondent a koi? car si tu veu savoir la longueur d un chaine de caractere tu peu utiliser la fonction strlen(char*)

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par kalifornication
    les 2 parametres (debut et fin)que tu envoi sont 2 pointeur sur carateres qui correspondent a koi? car si tu veu savoir la longueur d un chaine de caractere tu peu utiliser la fonction strlen(char*)
    Ce sont 2 pointeurs sur une partie d'une chaine, c'est pour connaitre la longueur d'un champ dans un enregistrement.
    ça me semblait plus simple dans ma lancée ...

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    autant pour moi, tu cherche pas a avoir la chaine complete...
    un autre truc : si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(intIndice=0;intIndice < intLongueur;intIndice++) { 
          ptrChrRetour[intIndice]=debut[intIndice]; 
       } 
       ptrChrRetour[intIndice]='\0';
    je crois que tu perd le dernier caractere car tu le remplace par '\0' il faudrai que tu fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(intIndice=0;intIndice < intLongueur;intIndice++) { 
          ptrChrRetour[intIndice]=debut[intIndice]; 
       } 
       ptrChrRetour[intIndice+1]=0;//sachant que '\0'=0

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par D[r
    eadLock]Si tu fais un realloc, la zone memoire nouvellement allouee n'est pas remplie de zeros (donc de NULL pour les char *). Donc a la fin, ton test n'est pas bon.

    Sinon, un realloc(NULL,...) est equivalent a un malloc. Donc tu peux changer ton test, et faire uniquement un realloc, suivit d'une mise a NULL de tous la zone memoire nouvellement acquise.

    Si ca ne resoud pas tout, tu peux essayer memwatch (lien poste dans d'autre thread), si ca marche tjrs pas, mets le code en entier (enfin, si c'est pas trop trop long non plus.
    Je ne comprends pas tout...
    aprés mon realloc j'obtiens un pointeur sur cette allocation.
    Il faut que prenne un deuxième pointeur que je place aprés la taille de la précédente allocation ou réallocation et utiliser memset sur la taille restante avec NULL comme caractère d'initialisation ?

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par kalifornication
    je crois que tu perd le dernier caractere car tu le remplace par '\0' il faudrai que tu fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(intIndice=0;intIndice < intLongueur;intIndice++) { 
          ptrChrRetour[intIndice]=debut[intIndice]; 
       } 
       ptrChrRetour[intIndice+1]=0;//sachant que '\0'=0
    En effet cela va de debut inclus à fin non inclus.
    Je ne souhaitais pas avoir le séparateur.
    Je m'arrange avant dans d'autre cas

  15. #15
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    desc->chrChampsCle == NULL

    tu l'inialise à NULL ton chrChampsCle ?

    c'est pas parcequ'il n'est pas alloué qu'il vaut NULL

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Il y a une chose que je n'ai pas précisé :

    Je bosse avec Visual C++, quand je Debug en pas à pas, je vois bien qu'une adresse est attriibué à ce pointeur qui pointe sur une chaine, (cette chaine est la bonne valeur que j'attends y trouver), quand le free s'éxécute cette adresse pointe vers n'importe quoi et ça plante.

    Dernière news j'ai relancé l'appli ce matin et ça fonctionne

    Je ne comprends plus rien

    Est-ce que quelqu'un aurait une plausible explication :

  17. #17
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par danel
    IJe bosse avec Visual C++, quand je Debug en pas à pas, je vois bien qu'une adresse est attriibué à ce pointeur qui pointe sur une chaine, (cette chaine est la bonne valeur que j'attends y trouver), quand le free s'éxécute cette adresse pointe vers n'importe quoi et ça plante.
    c'est normal qu'une fois le free executee, l'adresse pointe vers n'importe quoi, car la memoire liberee peut etre reutilisee par le systeme pour faire ce qu'il veut (et peut-etre meme etre allouee a un autre processus (donc plus le droit de lire cette zone)). Si ca plante des que tu veux lire (avec le debugger) cette zone, c'est que le debugger est mal foutu.

    Citation Envoyé par dane
    Dernière news j'ai relancé l'appli ce matin et ça fonctionne

    Je ne comprends plus rien

    Est-ce que quelqu'un aurait une plausible explication :
    C'est pas parce que ca marche une fois qu'il n'y a pas de bug. C'est peut-etre juste un coup de chance !

    Poste ton code, ce sera peut-etre plus clair pour tous.

    Citation Envoyé par kalifornication
    je crois que tu perd le dernier caractere car tu le remplace par '\0' il faudrai que tu fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(intIndice=0;intIndice < intLongueur;intIndice++) { 
          ptrChrRetour[intIndice]=debut[intIndice]; 
       } 
       ptrChrRetour[intIndice+1]=0;//sachant que '\0'=0
    Pas d'accord, le dernier char rempli dans la boucle est ptrChrRetour[intLongueur-1]. En sortant de la boucle, intIndice vaut intLongueur, c'est donc bien ptrChrRetour[intIndice] qu'il faut mettre (a '\0', ca sert a rien de mettre 0 pour dire ensuite que c'est pareil que '\0').

    Sinon, danel, pour ce que je disais, faut plutot faire une boucle qu'un memset, car un memset c'est pour des char (~1octet), et que NULL c'est un pointeur (~4 octets). (au final ca revient au meme car souvent NULL vaut (void *)0, mais bon, on sait jamais).
    Poste ton code, on sera fixes (pour savoir ce qu'il faut vraiment faire).

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    J'ai fait des tests avec memwatch et Halloc.

    compte rendu de memwatch :

    ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============

    Started at Thu Jul 10 18:16:57 2003

    Modes: __STDC__ 32-bit mwDWORD==(unsigned long)
    mwROUNDALLOC==4 sizeof(mwData)==32 mwDataSize==32


    Stopped at Thu Jul 10 18:16:57 2003


    Memory usage statistics (global):
    N)umber of allocations made: 34
    L)argest memory usage : 85145
    T)otal of all alloc() calls: 85293
    U)nfreed bytes totals : 0
    Conclusion ???

    Ensuite avec Halloc Il m'a signalé que mes pointeurs sur mon tableau étaient invalides,.

    Donc je ne libère que le tableau .

    Comment les allocations que je fais dans ma fonction ExtractChaine qui me renvoie le pointeur sur cette alloc sont libérées ?



    Citation Envoyé par D[r
    eadLock]
    Poste ton code, on sera fixes (pour savoir ce qu'il faut vraiment faire).
    Ce ne sera pas possible trop de ligne ...

  19. #19
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Apres ta premiere utilisation de F_descriptif, est-ce que tu remet ton pointeur desc_ref.chrChampsCle a NULL ? (pour qu'un eventuel realloc ne se goure pas).

    Et est-ce que tu peux poste plus en detail ton code qui gere uniquement l'allocation/modification et la liberation de tes structures. (en gros : declaration, initialisation, ou sont fait les appels a F_descriptifs, ou sont fait les desallocations).
    Sinon, as-tu un site (ou mettre le projet (s'il n'y a pas de restrictions)).

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par D[r
    eadLock]Apres ta premiere utilisation de F_descriptif, est-ce que tu remet ton pointeur desc_ref.chrChampsCle a NULL ? (pour qu'un eventuel realloc ne se goure pas).
    Non, en réalité cette fonction lit un fichier descriptif, j'en ai 2 à lire, du coup j'ai fait une fonction
    qui sert aux deux même si certains champs de la structure ne sont pas utilisés par les deux, et je passe en argument de la fontion un pointeur sur une variable
    de type struct descriptif (cf mon premier post) je fais la même chose avec une deuxième structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct descriptif desc_ref,*ptrDesc_ref;
    struct descriptif desc_data,*ptrDesc_data;
    ptrDesc_ref=&desc_ref;
    ptrDesc_data=&desc_data;
    F_descriptif(ptrDesc_ref,1);
    F_descriptif(ptrDesc_data,2);
    ,petite précision, ces variables sont globales,
    donc ce pointeur est également déclaré en même temps de cette variable et je lui attribue l'adresse de la variable.
    du coup "desc" dans ma fonction F_descriptif est un pointeur qui pointe sur un pointeur qui pointe sur ma variable.

    les allocations et réalloc se font avec ce pointeur desc dans la fonction F_descriptif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(desc->chrChampsCle == NULL) {
       if ((desc->chrChampsCle=(char **)calloc( intNbChamp + 1, sizeof (char *))) == NULL) {
           fprintf(stderr,"PROBLEME d'allocation de memoire [desc->chrChampsCle]\n");
           exit (1);
       }
    } else {
       if ((desc->chrChampsCle=(char **)realloc(desc->chrChampsCle,sizeof (char *) * (intNbChamp + 1))) == NULL)    {
          fprintf(stderr,"PROBLEME d'allocation de memoire [desc->chrChampsCle]\n");
          exit (1);
       }
    }
    dans cette fonction pour chaque indice j'appelle la fonction ExtractChaine qui alloue un espace mémoire
    et me renvoie le pointeur de celui-ci que je récupère dans mon tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    desc->chrChampsCle[intNbChamp]=ExtractChaine(ptrChrBufferLect,ptrTemp);
    Citation Envoyé par D[r
    eadLock]
    Et est-ce que tu peux poste plus en detail ton code qui gere uniquement l'allocation/modification et la liberation de tes structures. (en gros : declaration, initialisation, ou sont fait les appels a F_descriptifs, ou sont fait les desallocations).
    Sinon, as-tu un site (ou mettre le projet (s'il n'y a pas de restrictions)).
    Hélas il y en a
    Mais demain je ferais un nettoyage pour que tu vois globalement la structure du programme.

    merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/05/2014, 08h12
  2. Problème d'allocation mémoire sur requête Oracle.
    Par peaceinpal dans le forum JDBC
    Réponses: 2
    Dernier message: 02/08/2011, 09h41
  3. Problème de fuite mémoire sur un FLV
    Par p3ga5e dans le forum Flash
    Réponses: 0
    Dernier message: 05/10/2010, 16h15
  4. Problème libération de mémoire?
    Par Bartuk dans le forum C
    Réponses: 7
    Dernier message: 28/12/2005, 17h20
  5. Problème de fuite mémoire sur un idFTP
    Par jeromelef dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/07/2005, 17h29

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