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 delete[] tableau 2D


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Problème delete[] tableau 2D
    Bonjour,

    J'ai un problème, j'ai une erreur lorsque j'essaye de libérer de la mémoire avec delete[] voici des parties de mon code :

    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
    // Allocation dynamique de tableau a 2D
        double **matriceGlobale;
        matriceGlobale = new double* [tailleMatriceGlobale];
        for(int i =0; i<tailleMatriceGlobale; i++) matriceGlobale[i] = new double[tailleMatriceGlobale];
    
    // Initialisation du tableau a 2D
        for(int i = 0; i<tailleMatriceGlobale; i++)
            for(int j=0; j<tailleMatriceGlobale; j++)
                matriceGlobale[i][j]=0;
    
    // Calculs sur des éléments de ma matrice (tableau 2D)
    ...
    
    // Libération de la mémoire occupée par le tableau 2D
        for (int i =0; i<tailleMatriceGlobale; i++) {
            delete[] matriceGlobale[i];
        }
        delete[] matriceGlobale;
    Et c'est la que ça coince, j'obtient une erreur : Process returned -1073741819 (0xC0000005).


    Quand j'essaye le debug, j'obtiens le message suivant :

    Building to ensure sources are up-to-date
    Build succeeded
    Selecting target:
    Debug
    Adding source dir: C:\Documents and Settings\Administrator\Desktop\DF2D\DF2D\
    Adding source dir: C:\Documents and Settings\Administrator\Desktop\DF2D\DF2D\
    Adding file: bin\Debug\DF2D.exe
    Starting debugger:
    done
    Registered new type: wxString
    Registered new type: STL String
    Registered new type: STL Vector
    Setting breakpoints
    Debugger name and version: GNU gdb 6.7.50.20071127
    Child process PID: 396
    Error while mapping shared library sections:
    Error while mapping shared library sections:
    Program received signal SIGTRAP, Trace/breakpoint trap.
    In ?? () ()

    Je ne sais pas quoi faire ?
    J'utilise codeBlocks 8.02 sous windowsXP (64bits).

    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    et si tu utilisais plutot les outils classiques que sont std::vector, voire mieux boost::multi_array ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Joel F Voir le message
    et si tu utilisais plutot les outils classiques que sont std::vector, voire mieux boost::multi_array ?
    Est ce que je peu les utiliser même pour des matrices très grandes (genre 50000 x 50000) ?

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    oui.
    Sauf que bon, si tes matrices sont de cette taille, sont elles creuses ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par jesclaine Voir le message
    Est ce que je peu les utiliser même pour des matrices très grandes (genre 50000 x 50000) ?
    Ca dépend de combien de RAM tu dispose. mais que ce soit avec malloc ou avec des std::vector une matrice de doubles de 50000*50000 ca pèse :
    8 * 50000*50000=2 000 000 000 octets, je sais les ordis récents ont de base jusqu'a 4GO de RAM, mais ta matrice en prendrait quand meme la moitié , et je sais pas trop comment est gérée la pagination pour une seule tres grosse structure.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Pour la mémoire pas de problème, je travail pour un labo de recherche sur des pc à 16G de ram donc je pense que sa devrait suffire.

    Est-ce que vous avez une idée à mon pb (1er post) ?

    Si vraiment je dois changer vaut-il mieux std::vector ou boost::multi_array ?
    (pour de grandes matrices creuses lequel sera le plus rapide)

    Merci pour vos réponses rapides.

  7. #7
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    si tes matrices sont creuses, ni l'un ni l'autre. Il te faut une structure de données spécialisées.

    Si elles sont pleines, boost::multi_array

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Joel F Voir le message
    si tes matrices sont creuses, ni l'un ni l'autre. Il te faut une structure de données spécialisées.

    Si elles sont pleines, boost::multi_array
    J'ai des matrices creuses --> structure de données spécialisées. Mais c'est quoi une structure de données spécialisées ?

  9. #9
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par jesclaine Voir le message
    J'ai des matrices creuses --> structure de données spécialisées. Mais c'est quoi une structure de données spécialisées ?
    Cherche sur google :" C++ sparse matrix"
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Donc personne a une idée pour mon post de départ ?

    Car si ça peut m'éviter de changer en profondeur mon code.

  11. #11
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Tu compiles en 32 ou 64 bits ? en 32, tu es limité à 2Go par process, donc c'est mort pour ta matrice de 2Go.

    Sinon, compile en debug ( -ggdb -g3), pour avoir un peu plus d'infos, parce que là, ça n'est pas vraiment exploitable.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé une solution : j'ai utilisé le compilateur Microsoft Visual C++ 2005/2008 plutôt que GNU GCC Compiler et ça marche.

Discussions similaires

  1. problème delete tableau
    Par NiamorH dans le forum Windows
    Réponses: 8
    Dernier message: 24/01/2007, 21h27
  2. [XHTML] problème de tableau
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/04/2005, 07h18
  3. Problème de tableau
    Par tom06440 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/04/2005, 20h30
  4. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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