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 :

[Gestion fichiers] Erreur surprenante


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut [Gestion fichiers] Erreur surprenante
    Salut,

    dans un programme assez conséquent développé en C/C++ compilé grace à DevC++ 4.9, j'utilise les procédures fscanf, fopen, fprintf, fclose ... pour la gestion de fichiers .txt que j'utilise pour charger certains objets au début.

    Les fichiers txt peuvent être assez gros, de l'ordre de 6 Mo par exemple.

    Et le programme réagit d'une manière extrêmement surprenante et sans cohérence au chargement d'un fichier en particulier. Exemple : le programme est compilé, je le lance et il me lance approximativement l'erreur Windows du type "l'adresse "machin" est affectée à l'adresse 0x000000. La mémoire ne peut pas être "read" ".

    Je recompile le programme sans le modifier!!! et il fonctionne sans problème! Et ce phénomène se répète assez aléatoirement, desfois il le lance bien et desfois cette erreur apparait.


    Peut être cela pourrait il venir de l'ordinateur? Vraiment, je suis assez déconcerté.


    Si vous avez un indice

    PiX

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Pixcoder
    Si vous avez un indice
    C'est clair. Il y a un comportement indéterminé dans ton logiciel (autrement dit, il y a un bug).

    Je penche pour un manque de vérification après une allocation dynamique. Parfois, tu te retrouves avec un NULL et c'est le drame.

    Poste ton code ou donne une url si il est gros...

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Il faut vraiment vérifier ses "new" à chaque fois?

    Pourtant je fais attention à ce genre de choses. Je ne pensais pas qu'un "new" pouvait rater... Le plus gros "new" que je fais est de 1300 int environ.


    PiX

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Pixcoder
    Il faut vraiment vérifier ses "new" à chaque fois?
    new ? Le C++, c'est à côté !

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Constructif...

    je pensais avoir justifié le fait que ce message a été posté en "C".
    Bref, reprenons, les "malloc" (ou les "new", ca revient quasiment au même), faut- il en vérifier la valeur de retour à chaque fois?
    Se peut il que la mémoire ne puisse pas être allouée parfois?

    PiX

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Pixcoder
    Constructif...
    je pensais avoir justifié le fait que ce message a été posté en "C".
    En parlant de new ?
    Bref, reprenons, les "malloc", faut- il en vérifier la valeur de retour à chaque fois?
    Se peut il que la mémoire ne puisse pas être allouée parfois?
    Oui et oui.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Déjà, d'une certaine manière, on peut considérer qu'il n'est vraiment pas idéal de mélanger le C et le C++ dans un meme programme, tout simplement parce que ca a tendance à rendre les choses moins compréhensible, et à poser des problème lors de tentative de delete alors que la ressource est allouée par malloc() ou de free alors qu'elle était allouée par new...

    Ceci dit, tout malloc(), fopen() et autre appel systeme doit etre systématiquement testé: La plupart des appels systeme renvoie généralement NULL si il échoue.

    new et new[] devraient théoriquement, s'il n'ont pas été surchargé par toi, lancer une exception de type std::bad_alloc() en cas d'échec, et il y a donc intéret à faire le new au sein d'un bloc try...catch

  8. #8
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je penche pour un débordement de mémoire et/ou pour une non allocation dynamique assez petite qui arrive peut être trop tard (ou pas du tout).

    Bref tu auras compris, va falloir jeter un coup d'oeil à ton code

Discussions similaires

  1. [Upload] gestion des erreurs lors d'un upload de fichiers
    Par sarah65536 dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2009, 09h08
  2. Aide pour gestion d'erreur de lecture de fichier
    Par mbellemax dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/11/2008, 00h42
  3. Gestion d'erreur pour fichier introuvable
    Par Baldor dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/05/2008, 13h31
  4. gestion des erreurs avec fichier .properties
    Par _momo dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/08/2007, 14h05
  5. Réponses: 7
    Dernier message: 05/08/2005, 16h32

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