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

Réseau C Discussion :

fopen erreur incomprehensible


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut fopen erreur incomprehensible
    j'ai un bug que je n'arrive pas à debugger

    - à l'intérieur d'une fonction courte j'essaie d'insérer le contenu d'un buffer dans un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FILE * fp;
     
    if ((fp = fopen("c\\buffer.txt","w+b")) == NULL)
    	{
    		fprintf(stderr,"Erreur à l'ouverture du fichier ");
    	}
    le compilateur (mingw) ne rapporte pas d'erreur
    la console rapporte un " Terminated with return code -1073741819 "
    le fichier n'est pas ecrit (meme vide)

    si je commente l'action fopen, je n'ai plus d'erreur

    fopen fonctionne dans une autre partie du script, je l'ai desactivé pour parfaire le test mais rien y fait

    pourriez vous m'aider ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Par défaut
    salut,

    je ne sais pas si je vais arriver à t'aider mais deja quelque conseil:
    évite d'imbriquer les les instruction dans la condition(tu verra mieu la source d'erreur s'il n'y a qy'une instruction par ligne).
    essaie de coller le * et fp.

    salut
    hedi07

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    merci

    en fait le fopen je l'ai ecrit à toutes les sauces, la j'ai posté la derniere expression

    mais n'ayant ni warning ni erreur di compilo, stderr est vide

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    if ((fp = fopen("c\\buffer.txt","w+b"))
    Y'a rien qui choque ??

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par Mat.M
    Y'a rien qui choque ??
    Jvois pas ce qui est choquant, à part le b qui n'a de sens que sous windows

    Edit: Ah oui, il manque les deux points.. mais ça ne concerne pas son pb

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Tu as typiquement un erreur ailleurs dans le code
    Les trucs frequents :
    * depassement de zone memoire (depassement dans un buffer dans la pile, dans un buffer statique, dans une zone memoire malloquée)
    * mauvais free (free d'une zone non malloquée, double free)
    * utilisation d'une variable non initialisée

    Ce genre d'erreur ne fait pas systematiquement planter l'appli, le comportement est "indefini", c'est pour ça qu'il ne faut pas dire "ça marche" quand ça marche, mais plutot "ça ne plante pas". Tu peux avoir une erreur et ne jamais t'en rendre compte.

    Pourquoi c'est le fopen qui plante? l'erreur est avant ce fopen et corromp soit des variables de ton programme, soit certaines donnees internes à la glibc.

    Prete attention à ce qu'il se passe avant ce fopen, ou familiarise toi avec des outils permettant de detecter ce genre d'erreurs ( valgrind )

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Citation Envoyé par Gruik
    Tu as typiquement un erreur ailleurs dans le code
    Les trucs frequents :
    Allons! Typiquement comme le code est donné il y a forcément une erreur et évidemment ça ne peut pas marcher bien lire le morceau de code.

    Citation Envoyé par Gruik
    Jvois pas ce qui est choquant, à part le b qui n'a de sens que sous windows

    Edit: Ah oui, il manque les deux points.. mais ça ne concerne pas son pb
    avec b ça ne risque pas de fonctionner ou alors le code est mal fait ça induit totalement en erreur

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    le prog valgrind a l'air super genial, je vais l'installer, merci à toi

    le fopen me buggue le script dans toutes ses expressions, voila la fonction initiale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    /*******************************************************/
    long int get_file_size(char* http_request)
    /*******************************************************/
    {
    char buffer[0x1000];
    //
    send(sock,http_request,strlen(http_request),0);
    recv(sock,buffer,0x1000,0);
     
    char * file_ini = strstr(buffer,"\r\n\r\n")+4;
    char * grep_lenght = strstr(buffer,"Content-Length: ");
    long int file_size;
     
    if(grep_lenght != NULL)
    	{
    	file_size = atol(strtok(grep_lenght+16,"\r"));
    	}
    	else
    		{
    		return 0;
    		}
    int buffer_size = sizeof(buffer);
    //shutdown(sock,SD_SEND);
    printf("%s",file_ini);
    printf("%s","\n");
    printf("%s",buffer);
    printf("%s","\n");
    printf("%d",buffer_size);
     
    printf("%s","\n");
    printf("%s","\n");
     
    FILE * fp;
     
    fp = fopen("c:\\buffer.txt","w+b");
     
    fwrite(buffer,sizeof(buffer[0]),sizeof(buffer),fp);
     
    fclose(fp);
     
    return file_size;
    }

  9. #9
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par Mat.M
    Allons! Typiquement comme le code est donné il y a forcément une erreur et évidemment ça ne peut pas marcher bien lire le morceau de code.



    avec b ça ne risque pas de fonctionner ou alors le code est mal fait ça induit totalement en erreur
    Sache, pour ta gouvernante, que "b" existe bel est bien pour le fopen version dos/windows

  10. #10
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    recv(sock,buffer,0x1000,0);
    Tu demandes de remplir entierement ton buffer, mais et apres?
    Ton buffer ne contient pas une chaine mais un ensemble de caracteres. La difference est qu'il n'ya pas de caractere nul. Les strstr qui suivent ont un comportement indeterminé.
    Un moyen efficace d'y remedier est de mettre le buffer à 0 (man memset) avant de le passer à recv. Et pour recv, demander d'y mettre "(sizeof buffer) - 1" caracteres histoire que le dernier caractere du buffer reste à 0

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    edit : en fait je suis très nul, je vais essayer ça

    je suis tres nul en C/C++

    mais b = binaire

    il y a plusieurs caracrères de la table ascii qui ne sont pas pris en charge par mode txt de windows

    ceci a pour effet de terminer les commandes fstream quand ils reçoivent l'un de ses caractères

    donc rb wb est obligatoire

Discussions similaires

  1. [VB.Net] erreur incomprehensible
    Par eown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/05/2007, 02h03
  2. [XSLT] erreur incompréhensible
    Par gojira dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 19/06/2006, 11h19
  3. [Fortran 77] Message d'erreur incompréhensible
    Par userB dans le forum Fortran
    Réponses: 2
    Dernier message: 09/06/2006, 10h43
  4. [vb.net][exception] erreur incomprehensible
    Par arnolem dans le forum Windows Forms
    Réponses: 8
    Dernier message: 05/01/2006, 14h33
  5. [langage] Erreur incomprehensible!!!!!
    Par sali dans le forum Langage
    Réponses: 4
    Dernier message: 08/05/2004, 20h58

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