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 :

Petit problème de désallocation de tableau 2D


Sujet :

C++

  1. #1
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut Petit problème de désallocation de tableau 2D
    Salut,

    Je ne comprends pas pourquoi mon petit bout de code plante à inexécution à la ligne #7:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int détruire ( double** tableau, int ty )
    {
    	for ( int i = 0; i < ty; i++ )
    	{
    		delete[] tableau[i];
    	}
    	delete[] tableau;  //Plantage ici ( voir miniature attachée )!!!
     
    	return 0;
    }
    Je ne comprends pas d'ou vient le problème!

    Ce code est identique à celui que j'ai trouvé dans le faq ( ) en cherchant une solution à ce problème. L'adresse pointée par tableau ( ici c'est : 0x00036360 ) est bien celle de pointée par le pointeur passé en argument à la fonction détruire.

    ( Je tourne sous Visual C++ express 2008 )
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    ton tableau est mal alloué: tu utilises 2 fois tx et jamais ty pour l'allocation.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Merci à toi ô R0d,
    C'était une simple faute d'inattention. ( C'est le métier qui rentre!!! )

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par bertry Voir le message
    C'est le métier qui rentre
    Héé oui
    C'est difficile, mais il faut passer par là
    En fait, on en fait tout le temps ce genre d'erreur, même avec beaucoup d'expérience. La différence c'est qu'avec le temps, on apprend à localiser puis réparer l'erreur immédiatement.

    Sinon, y a-t-il une raison particulière pour laquelle tu utilises des double* (qu'on appelle "tableau C-style", car c'est la façon de faire des tableaux en C) plutôt que des vector, qui est la façon de faire des tableaux en c++?
    Je demande ça car si tu avais utilisé des vector<double> plutôt que des double*, tu n'aurais pas rencontré ce problème (ainsi que maints autres problèmes que tu vas rencontrer en continuant ton programme).
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Sinon, y a-t-il une raison particulière pour laquelle tu utilises des double* (qu'on appelle "tableau C-style", car c'est la façon de faire des tableaux en C) plutôt que des vector, qui est la façon de faire des tableaux en c++?
    La raison est simple r0d : c'était pour me rafraichir la mémoire ( Et manifestement ce n'était pas inutile!!! ). J'utilise en général des containers, mais comme ça faisait longtemps que je n'avais pas fait comme ça, et ben j'ai préféré passer par cette méthode qui tien plus de C que du C++, j'en conviens bien volontiers.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2013, 16h12
  2. [PHP 5.3] Un petit problème de caractères & tableau
    Par e-m.guillaume dans le forum Langage
    Réponses: 7
    Dernier message: 20/06/2011, 18h17
  3. Petit problème de tableau
    Par jpboogie dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 16/01/2009, 10h13
  4. [C/C++] petit problème de tableau
    Par GR3lh442kR dans le forum C++
    Réponses: 17
    Dernier message: 03/10/2008, 10h34
  5. [SDL]Petit problème avec un tableau de surfaces
    Par Jordinateur dans le forum SDL
    Réponses: 15
    Dernier message: 29/08/2007, 12h12

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