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 :

fopen renvoie <Bad Ptr>


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Points : 25
    Points
    25
    Par défaut fopen renvoie <Bad Ptr>
    Salut a tous,

    je suis en train d'écrire une DLL dans laquelle je dois ouvrir un fichier d'initialisation pour mon système. J'utilise la fonction "fopen" mais elle me renvoie un truc bizarre que je ne m'explique pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FILE *f;
    f = fopen ("D:\\output_file.jic","rb");
     
    if (f == NULL)
       return OPEN_ERROR;
    lorsque le programme execute ces lignes, "f" reçoit bien une adresse (et donc, la fonction ne passe pas par le "return OPEN_ERROR;") mais tous les paramètres de la structure FILE sont a 0.
    par exemple, la valeur de "f->_ptr" est "0x00000000 <Bad Ptr>"

    J'ai essayé avec plusieurs fichiers, et la meme chose se produit a chaque fois. Lorsque je donne le nom d'un fichier qui n'existe pas, "fopen" renvoie bien NULL.

    Merci pour votre aide.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <fstream>
    //...
     
    std::ifstream file("D:\\output_file.jic");
    if(!fichier.fail())
    {
     //tu utilise ton fichier
    }
    "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)

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Est-ce que au moins un fread() dessus marche ?
    Après tout, la CRT fait sa cuisine toute seule derrière, la structure FILE est supposée être un type opaque, donc il peut être normal que fopen() retourne une structure dont des champs sont nuls...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Points : 25
    Points
    25
    Par défaut
    Effectivement medinoc, un fread fonctionne. Je ne m'en étais pas aperçu parce que je récupérais la taille du fichier qui est nulle pour faire mon fread (et pour allouer mon buffer), mais en mettant une valeur en dur, ça marche.

    C'est un peu embetant quand meme, j'aimerais bien récupérer la taille du fichier.

    Je n'ai pas l'habitude d'utiliser les "std", je vais voir ce que ca donne de ce coté.

    merci en tout cas, je vais fouiller un peu et je reviendrais dire ou j'en suis...

    [edit pour medinoc] tu penses que c'est possible que tous le champs du FILE soient null?

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si ta DLL est une application non-console, je vois cela tout-à-fait possible, si fopen() ouvre le descripteur zéro (utilisé par stdin dans une application console).

    Et puis, la taille du fichier ne s'obtient pas avec fopen() seul, mais avec fstat(), ou fseek(SEEK_END) + ftell(), etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Points : 25
    Points
    25
    Par défaut
    Ok merci pour ces renseignement. j'utilise fseek() et ftell() pour récupérer la taille du fichier et tout fonctionne très bien.

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 24/11/2010, 17h41
  2. CString <bad ptr> UNICODE
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 15/10/2008, 15h29
  3. fopen renvoi toujours NULL
    Par kissmytoe dans le forum C
    Réponses: 6
    Dernier message: 01/11/2006, 20h01
  4. Que renvoie la fonction fopen?
    Par PorkyFighter dans le forum C
    Réponses: 11
    Dernier message: 17/10/2006, 00h15

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