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 :

gcc : problème d'exécution


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2005
    Messages : 98
    Par défaut gcc : problème d'exécution
    Bonjour,

    J'ai écrit cette fonction très simple :
    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
     #include <stdio.h>
    #include "asso.h"
    // fonction longueur : calcule le nombre de cases mémoires effectivement utilisées dans un tableau de taille 30 max.
    // => permet de calculer la longueur d'un vecteur. k doit être mis à 1 pour que le calcul soit correct.     
    int longueur(double vecteur[30], int k)
    {
        if (k == 31 || vecteur[k] == 0)
        {
            k--;
            return k;
        }
        else
        {    
            k++;
            longueur(vecteur, k);
        }
    }
    Je l'appelle ensuite dans le fichier suivant :
    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
    #include <stdio.h>
    #include "asso.h"
     
    int main()
    {
    	int tab[3]; // tableau de test
    	int n,k;
     
    	// remplissage de tab	
    	for (k=1;k<31;k++)
    	{
    		if (k<4)
    		{
    			tab[k] = 1;
    		}		
    		else
    		{
    			tab[k] = 0;
    		}
    	}
    	// calcul de sa longueur
    //	n = longueur(tab,1);
    	printf("le tableau a une longueur de %d \n", n);
    	return 0;
    }
    Je compile ensuite le tout avec gcc 4.1.1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gcc -c fonction.c
    gcc -c main.c
    gcc fonction.o main.o -o main.out
    La compilation se passe bien, mais à l'exécution (ie quand je tape ./main.out), mon programme m'affiche une magnifique ligne blanche... et ne s'arrête que si je fais [ctrl]+c.

    Quelqu'un pourrait-il me dire où est mon erreur svp?

    Merci d'avance pour vos réponses

    Agnès

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu as un tableau de 3 entiers et tu essai d'en mettre 31 dedans?

    Faute de frappe?

    Tu as un tableau de int, alors pourquoi dans la fonction tu prends un tableau de double en argument?

    Compile avec ca et corrige toutes les erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    gcc -Wall -ansi -pedantic -W -c fonction.c
    gcc -Wall -ansi -pedantic -W -c main.c
    gcc fonction.o main.o -o main.out

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention, vecteur[30] n'est pas supposé valide, et pourtant risque d'être consulté...
    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
    Membre confirmé
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2005
    Messages : 98
    Par défaut
    Citation Envoyé par Skyrunner
    Faute de frappe?
    Oui, ou plus exactement correction incomplète de ma part
    Enfin, après avoir corrigé mes erreurs (et m'être rappelée que les tableaux commençaient à 0 et pas à 1), ça marche.

    Merci à vous

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par agnesN7
    J'ai écrit cette fonction très simple :
    Quelqu'un pourrait-il me dire où est mon erreur svp?
    Je recommande ceci :
    #ifndef H_ASSO
    #define H_ASSO

    #include <stddef.h>

    size_t longueur(double *vecteur, size_t n, size_t k);

    #endif /* guard */
    http://emmanuel-delahaye.developpez....tes.htm#size_t
    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
     
    #include <stdio.h>
    #include "asso.h"
    /* fonction longueur : calcule le nombre de cases mémoires effectivement 
       utilisées dans un tableau de taille 30 max.
       => permet de calculer la longueur d'un vecteur. k doit être mis à 1 pour 
       que le calcul soit correct.
     */
    size_t longueur(double *vecteur, size_t n, size_t k)
    {
       if (k != n && vecteur[k] != 0)
       {
          k = longueur(vecteur, n, k + 1);
       }
       return k;
    }
    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
     
    #include <stdio.h>
    #include "asso.h"
     
    int main()
    {
       double tab[30]; // tableau de test
       size_t n, k;
     
       // remplissage de tab
       for (k = 0;k < 30;k++)
       {
          if (k < 4)
          {
             tab[k] = 1;
          }
          else
          {
             tab[k] = 0;
          }
       }
       // calcul de sa longueur
       n = longueur(tab, sizeof tab / sizeof * tab, 0);
       printf("le tableau est rempli a %u/%u \n"
              , (unsigned) n
              , (unsigned)(sizeof tab / sizeof *tab));
     
       return 0;
    }

  6. #6
    Membre confirmé
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2005
    Messages : 98
    Par défaut
    Je vous remercie de vos conseils qui m'ont aidé à optimiser mon code (ce que je cherche à faire !)

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

Discussions similaires

  1. GCC : problème de librairies...
    Par Pico10 dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 11/07/2007, 22h05
  2. [gcc] problème d'exécution très bizarre
    Par Anouschka dans le forum C
    Réponses: 10
    Dernier message: 14/06/2006, 11h29
  3. Réponses: 5
    Dernier message: 19/04/2005, 08h50
  4. [GCC] Problème d'installation windows
    Par gl0be dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 13/09/2004, 11h26
  5. Problème à l'exécution avec wxWindows (compilé avec BCC55)
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 14/11/2003, 18h04

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