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 :

[Debutant] Bus error


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Kevin12
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Par défaut [Debutant] Bus error
    Bonjour
    J'ai un problème avec le message d'erreur "bus error" quand je tente d'executer ce bout de programme. Il n'y a pourtant aucune erreur de compilation (cc -Wall -Wextra -O2 exotp2.c -o out) .

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include<stdio.h>
    #include<stdlib.h>
     
    typedef float  vect[20];
     
    void lire (vect x,vect y, int *n);
    float lag(vect x, vect y, int n, float al);
     
     
    void lire (vect x,vect y, int *n)
    {
    	int i;
    	float * a;
    	float * b;
     FILE *F;
    F=fopen("exo2.txt","r");
    i = 0;
    while(!feof(F))
    {
     
    	fscanf(F,"%f;%f",a,b);
    	fscanf(F,"%f;%f",x[i],y[i]);
     
    	i=i+1;
    	printf("Lecture ...");
    }
      *n=i-1;
     
    fclose(F);
    }
     
     
    float lag(vect x, vect y, int n, float al)
    {
    float p=0.,l;
    int i,j;
     
     
     
    for(i=0;i<n;i++)
    {
    	l=1.;
    	for(j=0;j<n;j++)
    	{
    		l=l*(al-x[j])/(x[i]-x[j]);
    	}
    	p=p+(l*y[i]);
    }
     
     
     
    return p  ;
    }
     
     
    int main (void)
    {
    	int * n =NULL;
    	vect x ,y;
    	float P,al=-1.5;
     
    lire(x,y,n);
     
    P=lag(x,y,*n,al);
     printf("la valeur de p(%f) est: %f\n",al,P);
     
    return 0;
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    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
    void lire(vect x, vect y, int *n)
    {
        int i;
        float *a;
        float *b;
        FILE *F;
        /* Il faut tester la valeur de F après fopen pour être sur que le fichier a 
            bien été ouvert*/
        F = fopen("exo2.txt", "r");
        i = 0;
        /* Ce n'est pas comme ça que feof doit être utilisé, lis la FAQ */
        while (!feof(F)) {
     
            /* a et b ne pointent vers rien */
            fscanf(F, "%f;%f", a, b);
            /* que ce passe-t-il si plus de 20 enregistrements sont présent ? */
            /* x[i] et y[i] ne sont pas des pointeurs */
            fscanf(F, "%f;%f", x[i], y[i]);
     
            i = i + 1;
            printf("Lecture ...");
        }
        /* il faut s'assurer que ne à l'air valide avant d'écrire dans la valeur
            pointée*/
        *n = i - 1;
     
        fclose(F);
    }

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 474
    Par défaut
    « Bus Error » sur Solaris est généralement due à une segfault. Et, à vue de nez, ton programme contient au moins trois endroits où elle est suceptible de se produire :
    void lire (vect x,vect y, int *n)

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
    	int i;
    	float * a;
    	float * b;
     FILE *F;
    F=fopen("exo2.txt","r");
    i = 0;
    while(!feof(F))

    • feof() ne fait pas ce que tu crois ;
    • Tu ne vérifies pas si le fichier a été correctement ouvert.


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {
     
    	fscanf(F,"%f;%f",a,b);

    « a » et « b » sont bien des pointeurs sur des floats mais ne sont pas initialisés. Ils ne pointent donc rien du tout. Les variables de type float dans lesquelles fscanf() est censée déposer le résultat de sa lecture n'existent donc pas.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fscanf(F,"%f;%f",x[i],y[i]);
     
    	i=i+1;
    	printf("Lecture ...");
    }
      *n=i-1;
     
    fclose(F);
    }

    Tu utilises le pointeur n qui t'a été transmis depuis la fonction main(), sauf que celle-ci l'a initialisé à NULL. Il est donc bien défini, mais ne pointe vers rien.


    Il a probablement d'autres erreurs, mais je ne suis pas allé jusqu'au bout.

  4. #4
    Membre confirmé Avatar de Kevin12
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Par défaut
    Merci à vous

    Le C est trop chiant.

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Kevin12 Voir le message
    Le C est trop chiant.
    Non, le C demande de la rigueur.
    Les membres qui participent au forum C le font souvent parcequ'ils aiment bien ce langage. Je pense qu'il fut éviter de le dénigrer si tu veux des réponses.

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

Discussions similaires

  1. [debutant]bus error : scanf
    Par nytheouf dans le forum C
    Réponses: 3
    Dernier message: 27/11/2007, 21h36
  2. [Débutant] Bus Error et scanf
    Par BiLLKiLL dans le forum C
    Réponses: 2
    Dernier message: 17/09/2006, 20h47
  3. bus error sur une machine SUN
    Par mhtrinh dans le forum C
    Réponses: 14
    Dernier message: 10/07/2006, 16h43
  4. [debutant] Link error - nouvelle installation
    Par dwalin dans le forum MFC
    Réponses: 3
    Dernier message: 02/05/2006, 21h45
  5. bus error
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 15/12/2005, 11h59

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