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 :

Segmentation fault (core dumped)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut Segmentation fault (core dumped)
    Bonjour, je m'initie à la programmation de tableaux en C et je rencontre un problème. Je sais que mon problème vient soit de:
    1) j'essaye d'accéder à un indice de tableau plus grand que la taille du tableau.
    2) j'ai un mauvais pointeur (un pointeur qui ne pointe pas sur un objet valide) et j'essaye d'utiliser une méthode ou accéder aux données de cet objet via le pointeur (ou simplement le déréférencer)
    Le programme me renvoie erreur mémoire savez-vous ou ce trouve mon erreur svp ?
    Voici le programme en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef int tabint[100];
     
    #include <stdio.h>
    int main(tab[])
    {
        int i=0;
        for (i=0; i<99; i++){
            tab[i]=0;
        }
        printf("Tableau répertoriant les différentes températures de la journée!,aujourd'hui je suis très fatigué, par ailleurs je suis très malade ISSSSOOOOUUUUUUUUU\n");
        printf("%s", tab[i]);
        return 0;
    }

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Houla , ça fait peur !!!

    • Le typedef apparement tu ne comprends pas son principe. Tu viens de définir un synonyme pour le mot int qui par ailleurs est réservé.
    • Le prototype de la fonction main(); est int main (int argc, char *argv[]);.


    Revois la définition d’un tableau.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    bonjour et merci de votre attention: et si je modifie le code de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef tabint[100] //tableau de 100 CASES
    #include <stdio.h>
    int main(int i, char*tab[])
    {
        for (i=0; i<99; i++){
            tab[i]=0;
        }
        printf("Tableau répertoriant les différentes températures de la journée!,aujourd'hui je suis très fatigué, par ailleurs je suis très malade ISSSSOOOOUUUUUUUUU\n");
        printf("%s", tab[i]);
        return 0;
    }

  4. #4
    Membre éclairé
    Homme Profil pro
    Autres
    Inscrit en
    Août 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Août 2008
    Messages : 39
    Par défaut
    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
     
    /* 
    Tableau de 100 cases de quoi ? int, double, char ?
    De plus tu ne sais pas à quoi sert typedef je suppose ? Car là il ne sert à rien
    */
    typedef tabint[100] 
     
    #include <stdio.h>
     
    int main(int i, char*tab[]) // Tout est à revoir concernant le main et le passage d'argument dans celui ci
    {
      for (i=0; i<99; i++){ // Tu veux un tableau de 100 cases hors i < 99 donne seulement 99 cases initialisé à zéro et non 100
      tab[i]=0;
     
      }
     
      printf("Tableau répertoriant les différentes températures de la journée!,aujourd'hui je suis très fatigué, par ailleurs je suis très malade ISSSSOOOOUUUUUUUUU\n");
      /*
      Ton i t’amène dans une case du tableau non initialisé à cause de ton erreur du dessus
      Le %s c'est pourquoi au juste ? Si c'est du int c'est %d
      Mais comme je l'ai dis tu auras une valeur non initialisé de ton tableau a cause de ton erreur du dessus
      */
      printf("%s", tab[i]); // Est ici ton i vaudra toujours plus que le nombre de cases du tableau, c'est [i - 1] qu'il faudra indiquer, si je suis ta logique de codes
     
      return 0;
    }
    Au faite mieux vaut utiliser les balises représenter par # car là c'est pas terrible à la lecture, surtout que ton code est pas très lisible, heureusement qu'il y a peu de lignes
    Pour finir tout ton code est faux et est à revoir

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Commence par lire la faq sur le mot réservé typedef.

    Ça te permettra de comprendre la première grosse erreur de ton code.

  6. #6
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    en suivant les instruction de la FAQ:

    le int n'est pas à utiliser ici

    du coup typedef X tabint[100] que puis-je mettre à la place du int pour définir tabint[100] comme un tableau svp ?( en Python ce serait np.array...)

  7. #7
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    du coup mon typedef ne sert a rien car je ne l'utilise pas dans la fonction principale...
    il s'agit d'un tableau de 100 cases avec des entiers à l'intérieur

  8. #8
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Il suffit simplement de déclarer ton tableau avec le type souhaité.


  9. #9
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    int main(tab[])
    {
        for (i=0; i<100; i++){
            tab[i]=0;
        } //cases avec seulement des 0
        printf("Tableau répertoriant les différentes températures de la journée!,aujourd'hui je suis très fatigué, par ailleurs je suis très malade ISSSSOOOOUUUUUUUUU\n");
        printf("%d", tab[i]);
        return 0;
    }
    concernant le s j'avais mis un d: pour les valeurs entières mais dans un exemple vu sur internet j'avais vu un s...

  10. #10
    Membre éclairé
    Homme Profil pro
    Autres
    Inscrit en
    Août 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Août 2008
    Messages : 39
    Par défaut
    Ton tableau n'a toujours pas de type défini.
    Ici j'indique juste quelques correction de ton code plus haut, sans typedef et en utilisant la boucle que tu avais écrite.
    Mais faut revoir quelques bases je pense.

    Pour ce que tu veux faire, plus haut "gerald3d" ta donner le prototype de main pour récupérer des valeurs : Le prototype de la fonction main(); est int main (int argc, char *argv[]);
    Mais il y a du boulot je pense avant de voir ça

    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
     
    #include <stdio.h>
     
    int main(void)
    {
      int tab[100];
      int i = 0;
     
      for (i = 0 ; i < 100 ; i++) // Ici la boucle s’arrêtera quand i vaudra 100, en C l'indice d'un tableau commence à 0 est donc la dernière case de ton tableau est 99
      {
        tab[i] = 0;
      }
     
      printf("Tableau répertoriant les différentes températures de la journée!,aujourd'hui je suis très fatigué, par ailleurs je suis très malade ISSSSOOOOUUUUUUUUU\n");
      printf("%d\n", i);
      printf("%d\n", tab[i - 1]);
     
      return 0;
    }

Discussions similaires

  1. segmentation fault (core dumped)
    Par domdom974 dans le forum Fortran
    Réponses: 2
    Dernier message: 04/08/2009, 09h07
  2. [ASE 15.0.3] Segmentation Fault - core dumped
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 0
    Dernier message: 04/06/2009, 10h55
  3. segmentation fault (core dumped)
    Par miamiam dans le forum Débuter
    Réponses: 3
    Dernier message: 26/11/2008, 11h46
  4. Réponses: 1
    Dernier message: 10/12/2006, 21h37
  5. Segmentation fault (core dumped)
    Par Battosaiii dans le forum C
    Réponses: 13
    Dernier message: 25/11/2005, 18h36

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