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 :

New et ses exceptions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut New et ses exceptions
    Bonjour,

    Mon problème est sans doute très courant mais je n'ai toujours pas réussi à le résoudre. J'utilise l'opérateur new pour créer dynamiquement un tableau de nombre flottants. Le problème vient du comportements du programme qui s'arrête après quelques allocations consécutives (je précise que c'est un code pour exploiter un fichier 3ds et que les tableaux doivent recevoir les coordonnées des points de l'objets...j'ai donc une classe qui me sert à contenir un objet avec quelques pointeurs vers ces tableaux...etc.). Au bout de 12 tableaux de 115 entiers chacun le programme se "crash"...de plus je n'arrive pas à mettre en place des "try...catch..." pour savoir la nature de l'erreur...Est-il possible que cela vienne du fait que j'utilise un vecteur et que je ne place pas les donnnées au "bon endroit"???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Dans la description de la classe 'object' :
    float *X;
     
    //Dans le traitement du fichier 3DS:
    (list_OBJECTS.end()-1)->X = new float[nombre];
    Merci de votre aide

  2. #2
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Quelle est la nature de l'objet list_OBJECTS. Si c'est un vector, comme semble l'indiquer tes explications, alors list_OBJECTS.end() n'est pas un pointeur mais un itérateur. Les opérations arithmétiques ne sont pas définies dessus, seuls les opérateurs ++ (et parfois --, pas toujours, mais dans le cas du vector il l'est) le sont.

    Après avoir vérifié que ton vecteur n'est pas vide, je mettrais plutot :
    list_OBJETS.back().X = new float [nombre];

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par fenkys Voir le message
    Quelle est la nature de l'objet list_OBJECTS. Si c'est un vector, comme semble l'indiquer tes explications, alors list_OBJECTS.end() n'est pas un pointeur mais un itérateur. Les opérations arithmétiques ne sont pas définies dessus, seuls les opérateurs ++ (et parfois --, pas toujours, mais dans le cas du vector il l'est) le sont.
    Dans le cas des random access iterator (et ceux de std::vector en sont), l'arithmétique est bien définie.

  4. #4
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Il est vrai que ça semble plus "propre ainsi...

    Mais le programme plante toujours à ce point. Enfin encore pire, car il fait correctement l'allocation pour le premier des tableaux et s'arrête de suite alors que les opérations sont effectuées en parallèles sur les 3 tableaux...comme précédemment l'opération à déjà été faite avec succès au par-avant...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    list_OBJECTS.back().X = new float[nombre];
    LOG("X");
    list_OBJECTS.back().Y = new float[nombre];
    LOG("Y");
    list_OBJECTS.back().Z = new float[nombre];
    LOG("Z");
    me retourne seulement X...

  5. #5
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    En poussant un peu le bouchon j'ai remarqué que ce code ne lançait pas de "std::exception" mais qu'en comparant les adresses des première cases du tableau je retrouvais les mêmes à deux endroits.
    Le programme crée donc l'avant avant dernier tableau à une adresse 0X... et crée l'avant dernier tableau à la même position (sachant qu'en plus ils font les mêmes dimensions), puis il s'arrête à l'allocation suivante.

  6. #6
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Je viens de résoudre le problème qui venait en fait de la façon dont j'ajoutais l'objet au vecteur...
    Car le vecteur contenait non pas des pointeurs vers les objets mais les objets eux-même...ce qui explique les petits problèmes de mémoire

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

Discussions similaires

  1. [Base de donnée] new TTable() provoque exception Kernel32 !
    Par Feneck91 dans le forum C++Builder
    Réponses: 61
    Dernier message: 17/03/2011, 10h02
  2. probleme : throw new Exception
    Par anto48_4 dans le forum Langage
    Réponses: 8
    Dernier message: 20/12/2010, 08h24
  3. Réponses: 7
    Dernier message: 15/02/2007, 23h58
  4. [JNI] creer ses propres exceptions
    Par Batou dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/08/2006, 04h01
  5. Créer ses propres exceptions
    Par Neilos dans le forum C++Builder
    Réponses: 10
    Dernier message: 13/06/2006, 18h44

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