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 :

Fichier - invalid null pointer


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Par d�faut Fichier - invalid null pointer
    Bonjour � tous !

    Je suis sur le d�veloppement d'un jeu. j'utilise une class "Carte" permettant le chargement d'un fichier contenant les donn�es d'une carte. ce fichier est un fichier au format texte et il sont nom est contenu dans un "const char* fichier) d�clar� dans la class.

    je fais donc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    	int largeurImage = 0;
    	int hauteurImage = 0;
    	char* fichierImage = NULL;
    	char delimiter;
     
    	std::ifstream donnees(this->fichier);
    donnees >> largeurImage >> delimiter >> hauteurImage >> delimiter >> fichierImage;
    pour lire le contenu du fichier. J'ai une erreur que je ne comprend pas au moment de lire les informations (invalid null pointer)

    Je comprend pas trop d'ou �a peut venir. j'ai bien v�rifier le chemin du fichier, �a fonctionne et la premi�re ligne du fichier est:
    �a devrais fonctionner... je comprend pas

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    �a devrais fonctionner...
    Qu'est-ce qui te permet de pr�tendre une chose pareille ?

    Comment tu veux �crire les donn�es de ton fichier en m�moire, puisque ton pointeur est nul ?

  3. #3
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Cela n'a aucune chance de fonctionner, vu que tu essaye de faire placer une valeur lue dans une pointeur initialis� � NULL...

    On le dit et on le r�p�te, ces temps, si � longueur de journ�e:

    POUR LA GESTION DE CHAINE DE CARACTERES, IL FAUT UTILISER LA CLASSE STD::STRING QUI REND LES CHOSES BIEN PLUS FACILES QUE LES CHAINE DE CARACTERES "C STYLE"

    Est-ce �crit, cette fois-ci suffisemment grand pour que cela rentre enfin dans la tete de tous

    Si, vraiment, il faut que tu r�cup�re une chaine C style, pour l'utilise comme nom de fichier pour ouvrir un flux, par exemple, tu dispose de la fonction membre c_str() qui fera cela tres bien...
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  4. #4
    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
    Citation Envoy� par koala01

    POUR LA GESTION DE CHAINE DE CARACTERES, IL FAUT UTILISER LA CLASSE STD::STRING QUI REND LES CHOSES BIEN PLUS FACILES QUE LES CHAINE DE CARACTERES "C STYLE"

    Est-ce �crit, cette fois-ci suffisemment grand pour que cela rentre enfin dans la tete de tous
    L� je pense que c'est bon !

  5. #5
    Membre �clair� Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Par d�faut
    oula oula !

    J'avais tendance � utliser du char* comme habitude (langage C). Je vais essayer d'utiliser les std::string mais c'est un peu embettant dans certains cas car l'api que j'utilise (SDL) est en C.

    De l'autre, je pensais que �a fonctionnerais car j'initialise � NULL mais ensuite je lis le fichier : je place dans le char* le contenu...

    si je fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    char* toto = NULL;
    toto = "coucou";
    �a pose aucun probl�me...

    Enfin bon, je vais me mettre au string

    Encore merci

  6. #6
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    std::string peut te sortir un const char* quand tu veux avec sa fonction membre c_str(). Bosser avec des APIs C n'est pas une excuse pour ne pas les utiliser

    Ensuite quand tu fais toto = "coucou", c'est une erreur car "coucou" est une cha�ne litt�rale certainement plac�e dans un espace en lecture seule. Il faudrait donc que toto soit un const char*.

    Ensuite concernant la lecture, l'op�rateur >> ne vas pas allouer d'espace pour la cha�ne qu'il va lire, il va supposer qu'il y a suffisamment de place au bout du pointeur. Comme tu ne connais pas la taille de la cha�ne � lire... autant dire que std::string est in�vitable.

  7. #7
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par poussinphp
    oula oula !

    J'avais tendance � utliser du char* comme habitude (langage C). Je vais essayer d'utiliser les std::string mais c'est un peu embettant dans certains cas car l'api que j'utilise (SDL) est en C.
    Ca, c'est typiquement un mauvais argument...

    Comme, malgr� tout, tu peux toujours obtenir la chaine C style � ta bonne convenance, utilise la std::string tant que tu peux, et passe en C style seulement quand tu as r�ellement besoin du C style (SDL, nom de fichier � fournir pour ouvrir un flux...)

    La seule exception est, finalement, quand tu dois lire le contenu d'un fichier dans un buffer en vue de le traiter et que tu ne peux pas etre qu'il n'y aura pas un signe "eof" ou autre singificateur de fin (typiquement, les fichier images et son)...

    A ce moment l�, le fichier sera bien souvent encod� en binaire, d'ailleurs, et ce qu'il te faudra faire, c'est de d�clarer un pointeur de type char, de lui allouer la taille pour contenir la totalit� du fichier, et de lire le fichier "d'une seule traite"...
    De l'autre, je pensais que �a fonctionnerais car j'initialise � NULL mais ensuite je lis le fichier : je place dans le char* le contenu...

    si je fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    char* toto = NULL;
    toto = "coucou";
    �a pose aucun probl�me...
    ce que tu fais l�, c'est:
    d�clarer un pointeur et l'initialiser � NULL
    fournir � ce pointeur l'adresse � laquelle se trouve la chaine (d�finie dans la m�moire "read only") "coucou"...

    D'ailleurs, c'est bien simple, il te sera normalement impossible d'�crire un code du genre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    char* toto = NULL;
    toto = "coucou";
    toto[2]='a';
    Si on initialise un pointeur � NULL, c'est simplement:
    • parce que NULL est la seule valeur connue et testable dans n'importe quelle application
    • parce que lors de la d�claration d'un pointeur, on ne peut jamais etre sur du contenu, du fait d'une utilisation ant�rieure de la m�moire


    Enfin bon, je vais me mettre au string

    Encore merci
    Ca, c'est une tres bonne initiative
    [EDIT]grill�
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Null Pointer Exception
    Par gloglo dans le forum Langage
    R�ponses: 4
    Dernier message: 20/12/2006, 11h32
  2. [Struts] Null Pointer Exception
    Par n@n�u dans le forum Struts 1
    R�ponses: 1
    Dernier message: 01/08/2006, 13h10
  3. Null Pointer Exception
    Par snouppy dans le forum JBuilder
    R�ponses: 3
    Dernier message: 13/06/2006, 21h53
  4. Null pointer assignement
    Par issou dans le forum C
    R�ponses: 12
    Dernier message: 18/11/2005, 13h39
  5. [Language]Constructeur==> Null pointer?
    Par Chiwawa dans le forum Langage
    R�ponses: 8
    Dernier message: 14/05/2005, 22h51

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