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 :

Delete tableau n=2 ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut Delete tableau n=2 ?
    Hello!

    Voilà je n'arrive pas a faire en sorte que mon programme ne plante pas!

    J'utilise un tableau à 2 dimensions que j'initialise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /* Variable de ma classe */
    unsigned int **array;
     
    /* Code dans mon constructeur pour l'initialisation comme sizeX et sizeY st tres grands */ 
    array= new unsigned int*[sizeX]; 
    for(int i=0; i < sizeX; i++)
    	array[i] = new unsigned int[sizeY];
     
    /* Code dans le destructeur */
    for(int i = 0; i < sizeX; i++)
    	delete [] array[i]; 
     
    delete [] array;
    Ca compile et link nikel mais lors de l'exécution juste après etre sorti du code de mon destructeur j'ai le message d'erreur suivant :

    Unhandled exception at 0x1021e138 (msvcr80d.dll) in test.exe: 0xC0000005: Access violation reading location 0xccccccc0.

    L'instruction qui plante est dans le fichier dbgdel.cpp dans la methode de l'operateur delete a la ligne :

    /* verify block type */
    _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));



    Avez-vous une idée du problème?


    Pourtant mon tableau contient toutes mes valeurs lors de l'insertion!

    Merci beaucoup pour vos idées, conseils ou solutions !

    Tyv

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Bonjour, ton code tel quel n'a aucune raison de planter.
    Le problème doit venir d'ailleurs: soit ta pile est corrompue avant l'exécution de ton destructeur, soit ton tableau est invalide (modifié ailleurs) avant l'appel au delete.
    C'est sur quel delete que ça plante?
    Quel est l'état de ton tableau lorsque tu rentres dans le destructeur?

    note: utiliser des conteneurs (std::vector, boost::multi_array, etc.) éviterait certainement ce type de difficulté.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    Merci pour ta réponse c'est sympa d'avoir regardé!

    Maitenant ça ne plante plus...

    Dans mon constructeur j'initialisais mes 2 variables de ma classe comme ceci :

    sizeX = NB_VALUE_X;
    sizeY = NB_VALUE_Y;

    J'ai changé avec :

    this -> sizeX = NB_VALUE_X;
    this -> sizeY = NB_VALUE_Y;

    et maintenant ça plante plus!

    Je ne comprends pas pourquoi ça changerait quelque chose??

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Plusieurs déclarations de sizeX et sizeY dans la même portée, et il ne prenait pas les bons ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    Même pas c'est bizarre...

    Il y avait une et une seule déclaration de ces variables.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Dans l'absolu ça serait sans doute mieux d'utiliser les listes d'initialisation.
    Cela dit c'est quand même très louche qu'un coup ça plante et un coup plus, ça sent le problème mémoire en amont...

    MAT.

Discussions similaires

  1. Problème delete[] tableau 2D
    Par jesclaine dans le forum C++
    Réponses: 11
    Dernier message: 23/03/2010, 14h21
  2. Delete[] d'un tableau non managé
    Par karto dans le forum C++/CLI
    Réponses: 4
    Dernier message: 16/02/2007, 17h18
  3. problème delete tableau
    Par NiamorH dans le forum Windows
    Réponses: 8
    Dernier message: 24/01/2007, 21h27
  4. tableau de pointeurs et new, delete
    Par luckydigit dans le forum C++
    Réponses: 12
    Dernier message: 21/07/2006, 11h24
  5. delete tableau de string
    Par mathher dans le forum C++
    Réponses: 9
    Dernier message: 19/04/2006, 18h00

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