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++Builder Discussion :

Erreur acces mémoire


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut Erreur acces mémoire
    Je suis en train de programmer un petit soft au boulot et je suis tombé sur une erreur étrange que j'arrive pas a comprendre.

    en fait j'ai une classe qui contient en private des pointeurs.
    et quand je passe dans le constructeur, j'initialise ces pointeurs à NULL pour faire correctement mon delete dans le destructeur s'ils sont alloué durant le process.... jusqu'à la rien d'extraordinaire...

    Sauf que quand je place NULL dans ces pointeurs j'ai un autre pointeur qui passe a NULL alors qu'il n'a rien a voir avec ceux-là.

    pour moi un pointeur c'est juste un espace mémoire de 4 octet qui stocke une adresse où, dans ce cas, je place à NULL comme adresse à l'intérieur.

    J'ai l'impression en fait que ces deux pointeurs on la même adresse mémoire... et je trouve ça très étrange.

    Est-ce Borland qui a du mal a gérer la mémoire ???
    Ou c'est tout a fait autre chose qui m'échappe

  2. #2
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut
    bonjour,

    Pourrais tu mettre un bout de code?
    celui du constructeur, et les déclarations des pointeurs.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    Si ca peut t'aider... mais bon c'est standard...

    dans la declaration de la classe j'ai un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class ClassGen
    {
    private:
     ClassBidon *pClassBidon;
    }
    et dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ClassGen::ClassGen()
    {
    pClassBidon = NULL;
    }
    et en fait quand j'ai une fonction du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void func()
    {
       UneAutreClasse *test= new UneAutreClasse();
       ClassGen ClassAProbleme; // A PARTIR DE LA la variable test est de nouveau à NULL.
       ..... suite du programme.
    }
    je ne suis pas un newbi non plus en C++, quand je dis qu'il y a quelque chose d'étrange on est déjà 8 dans le bureau a savoir coder qui trouvent ça étrange.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut
    Je n'ai pas mis en doute tes compétences...
    J'espérais juste avoir une piste ou deux avec un exemple c'est tout!

    En fait, j'ai déjà eu des problèmes similaires... (dépassement de mémoire et autre joyeuseté!)

    Dans ce genre de cas, je rajouterais une variable (généralement un int) juste après le new.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void func()
    {
       UneAutreClasse *test= new UneAutreClasse();
       int Debug = 5;
       ClassGen ClassAProbleme; 
       ..... suite du programme.
    }
    "normalement", si c'est bien un problème de gestion mémoire, sa valeur doit changer, mais plus celle de test. sinon, le problème est peut être plus compliqué que juste la gestion mémoire...

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    ouais mais le pire dans mon cas c'est que cela se produit sur le pointeur passé en paramètre a la fonction, (il est initialisé bien avant)...

  6. #6
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut
    heu??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void func(UneAutreClasse *test)
    {
       int Debug = 5;
       ClassGen ClassAProbleme; 
       ..... suite du programme.
    }
     
    classGen::classGen()
    {
     ptr1 = NULL;
     ptr2 = NULL;
    }
    je suis pas sur d'avoir tout compris en fait...

    dans cette fonction, t'as des variables déclaré avant la création de cette classe?
    est ce que le code écrit ci dessus se rapproche plus de ton problème?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Try Catch (?) sur une erreur d'accès mémoire
    Par Jflop91 dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2013, 15h36
  2. Récursivité -- Erreur d'accès mémoire
    Par Monta^^ dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 13/07/2009, 12h46
  3. Programme détectant les erreurs de mémoire
    Par gids01 dans le forum MFC
    Réponses: 2
    Dernier message: 07/12/2005, 10h57
  4. [crash] Erreur accès fichier
    Par cesar33 dans le forum Access
    Réponses: 1
    Dernier message: 21/10/2005, 14h44
  5. Erreur Accès BDD
    Par psyco2604 dans le forum ASP
    Réponses: 13
    Dernier message: 10/06/2004, 10h46

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