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 :

Pbl d'exception


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut Pbl d'exception
    Salut à toutes et à tous !

    J'ai un souci avec une exception.
    J'ai récupéré la déclaration d'une classe basée sur l'ODE de numerical recipies (pour résoudre les équations différentielles sur la base de la méthode de Runge-Kutta), et j'ai donc essayé de m'en servir.

    Cette classe comporte entre autre une fonction free_vector qui sert comme vous l'aurez compris à libérer la mémoire d'un vecteur (entendre par là un tableau quoi). Cette fonction n'est ni plus ni moins que l'appel de delete[].

    Donc lorsque je débug mon programme, je me rends compte que l'appel à cette fonction ne pose aucun problème, jusqu'à ce que j'arrive à la ième itération, où là ben ça coince. Je comprends pas pourquoi. Le vecteur en question a été créé, il a une adresse, cette adresse est bien passée à la fonction free_vector, mais delete[] me retourne une exception comme quoi il trouve pas l'adresse (adresse violation).

    Quelqu'un aurai-il une tite idée ? Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    En général, ce genre de chose arrive quand il y a de la mémoire corrompue quelque part. Le plus grave, c'est que souvent, l'endroit où il y a l'erreur dans code et l'endroit où elle se manifeste n'ont rien à voir.

    Il y a plusieurs méthodes pour corriger ça :
    • Une revue de code (c'est encore l'une des plus efficaces...)
    • Une réécriture du code avec des outils plus adaptés (certainement le mieux, puisqu'on a après un code meilleur, mais peut être assez long). Par exemple, vu le domaine d'application, utiliser une vraie classe de vecteur mathématique qui se charge seule de la gestion de la mémoire et qui (en mode débug tout du moins) vérifie qu'on ne dépasse pas les bornes d'n tableau a de fortes chances de localiser le problème
    • Il y a des outils pour analyser la mémoire, comme purify ou boundscheckers
    • J'ai vu une technique sympa dans un vieux CUJ,(avril 2002) : L'Os peut déclarer une zone mémoire en lecture seule. On déclare donc ce tableau ainsi sauf quand on y touche depuis un endroit autorisé, et l'OS se charge de trouver à quel moment un autre bout de code viens mettre son bordel
    • Parfois, en regardant la mémoire brut, on arrive à identifier à quoi correspondent les zones à côté de celle qui est corrompue, et donc à cibler des suspect.


    Bon courage !
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Merci JolyLoic
    Comme je suis pas un cador en programmation, et que je suis très loin de connaitre toutes les ficelles du C++, je suis pas sur de tout comprendre...
    Mais bon c'est pas bien grave puisque ce que je retiens, c'est que c'est pas un problème bien simple à résoudre, et que la meilleure façon pour moi de le résoudre c'est de revoir totalement ou de récrire mon code.
    Donc je vais m'atteler à la tâche, de longues heures en perspectives

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je n'ai jamais lu la version C++ des numerical recipes, mais si tu utilises la version C de celles ci, je pense que le plus efficace sera de remplacer tous ces tableaux par des équivalents qui peuvent vérifier les bornes et gérer l'allocation eux-même. Normalement, ça ne demande pas tant de boulot que ça, et seules la création et la destructions ont besoin d'être modifiés en général, pas l'utilisation.

    Eventuellement, tu peux poster un bout de code, et je te montre comment le transformer.

    --
    Loïc
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Hello,
    Bon alors finalement, c'était bien une erreur dans mon programme. Je jongle en fait pas mal entre matlab et plusieurs versions de mes programmes, et du coup y'a des numérotations qui changent dans les tableaux....bref un bazarre à ma façon :-D
    Mais comme je me le dis souvent, quand y'a un souci qui dur un peu trop, faut se reposer la tête une tite journée, et y revenir tranquille ensuite. En général le problème est résolu illico.
    Pour ton info JolyLoic, je ne connais pas non plus la version C++ des numerical recipies (elle est payante ) mais par contre, pour ce que je voulais faire (utiliser la méthode Runge-Kutta pour résoudre des équations d'évolution non-linéaires couplées....), j'ai trouvé une belle adaptation C++ des fonctions offertes dans NR en C. Si tu veux le site où j'ai trouvé le code :
    http://www.ujf-grenoble.fr/PHY/COURS...ungeKutta.html
    Voilà, donc pour finir, tu avais raison, le mieux est de reprendre son code, et surtout l'endroit où l'erreur est indiquée par le debugger n'est pas forcément l'endroit où elle se produit réellement.
    @+ et merci encore....

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

Discussions similaires

  1. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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