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

SL & STL C++ Discussion :

Plantage en C++ avec fopen


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 109
    Par défaut [Résolu] Plantage en C++ avec fopen
    Bonjour,

    Je travaille sur un gros programme en C++ (assez vieux) qui doit lire des fichiers et qui utilise des fopen...

    La premiere ligne du fichier est TYPE_SYSTEME: xxxxx

    Voici le problème :

    dans mon main j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CMonLecteur Lecteur;
    FILE* pF =NULL;
    std::string Fich("MonFichier");
    pF=fopen(Fich.c_str(),"r");
    Le fopen fonctionne correctement car si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char TypeSysteme[320];
    fscanf(pF,"TYPE_SYSTEME:%s\n", TypeSysteme);
    je récupere xxxxxxx


    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lecteur.LireFichier(pF);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMonLecteur::LireFichier( FILE*fp)
    {
    char TypeSysteme[320];
    fscanf(pF,"TYPE_SYSTEME:%s\n", TypeSysteme);
    }
    Ca plante au niveau du _lock_file dans _file.c.

    Une idée svp ?
    Merci pour votre aide.
    François

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par franchouze Voir le message
    Une idée svp ?
    Merci pour votre aide.
    François
    Salut.
    Malheureusement non.
    Le bout de code que tu montre me semble bon.
    Tu doit avoir une erreur mémoire ailleurs.
    Peut tu utiliser les flux au lieu des FILE*?

  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
    fp pF dans ton membre, c'est une typo dans le message?

    A part cela, je n'ai rien vu de suspect.

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    fp pF dans ton membre, c'est une typo dans le message?

    A part cela, je n'ai rien vu de suspect.
    On dirait bien que c'est le problème... Car il n'y a rien d'autre.
    Le nom de l'argument de ta fonction qui est de type FILE* est effectivement fp alors que pour le fscanf tu a écris "pF" au lieu de "fp".

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 109
    Par défaut
    Merci pour vos réponses

    @Mongaulois : ces lignes sont au tout début de mon main. En gros il n'y a quasiment rien d'alloué mais je vais quand même essayé de regarder de ce coté.
    Si je ne trouve pas j'essaierai d'utiliser les flux mais j'ai peur que ce soit une solution qui masque le vrai problème.


    @Jean-Marc.Bourguet et Alp : effectivement il y a une erreur de typo mais c'est juste en tapant le bout de code un peu trop rapidement Dans le code source c'est bon


    Une autre piste. Je travaille sous Visual2005. A la compilation des modules j'avais des erreurs sur des redéfinitions de fonction de la std avec une lib à la Windows ou Visual (je n'ai pas encore eu le temps de creuser)... Pour éviter ces erreurs j'avais utilisé l'option de compilation /FORCE:MULTIPLE. Les erreurs se sont transformées en Warning et j'ai vu, juste avant de partir du taf, qu'il y en avait une avec le fscanf. Peut être que le fscanf utilisé n'est pas le bon.

  6. #6
    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
    Mauvais signe, ça... Toutes les bibliothèques doivent avoir été compilées par la même version du compilateur avec les mêmes options de compilation si on veut éviter les problèmes. Le /FORCE:MULTIPLE est très rarement une bonne idée...
    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.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 109
    Par défaut
    Merci pour votre aide à tous

    Le problème est résolu. J'ai en effet enlevé le /FORCE:MULTIPLE et du coup j'ai eu des erreurs qui provenaient d'un conflit entre la lib standard et celle de Visual qui est utilisée par défaut. Du coup j'ai fait un /NODEFAULTLIB:msvcrt.lib et ca tourne

    A++

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Celà dit, j'avais dejà eu un problème il y a longtemps avec un fopen, sans trouver la solution ...
    J'ai tout passé en std::fstream et c'était nickel...

    Moralité : la S(T)L est surement un poil mieux... surtout en C++

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

Discussions similaires

  1. plantage fils RSS avec adresse dynamique PHP et RSS
    Par rozow dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 22/03/2006, 16h31
  2. Problème avec fopen
    Par Binouce dans le forum C
    Réponses: 10
    Dernier message: 15/01/2006, 13h59
  3. Réponses: 7
    Dernier message: 07/01/2006, 15h18
  4. Plantage de IE avec un textarea
    Par Toxine77 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 28/11/2005, 12h27
  5. [Kylix] plantage MDK9.1 avec Kylix3
    Par picot dans le forum EDI
    Réponses: 2
    Dernier message: 28/09/2004, 14h45

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