Partage
  • Partager sur Facebook
  • Partager sur Twitter

core dumped lors de la compilation

Sujet résolu
    26 juin 2020 à 19:29:52

    Salut a tous. J'ai fait du code C mais lors de la compilation j'ai une erreur : "Erreur de segmentation (core dumped)". Je ne sais malheureusement pas d'ou cela viens. Voici le code :

    #include <stdio.h>
    
    int str_size(char *str) {
        int size = 0;
    
        for (int i = 0 ; str[i] != '\0' ; i++) {
    	size++;
        }
        return (size);
    }
    
    int find_char(char c, char *str) {
        int place = 0;
        for (int i = 0 ; str[i] != '\0' ; i++) {
    	if (c == str[i]) {
    	    place = i;
    	}
        }
        return (place);
    }
    
    char *convert_dec_to_base(int n, char *base) {
        char n_based[64];
        char converted_b[64];
    
        for (int i = 0 ; n != 0 ; i++) {
    	n_based[i] = base[n % str_size(base)];
    	n /= str_size(base);
        }
        for (int i = 0 ; i < str_size(n_based) ; i++) {
    	converted_b[str_size(n_based) - i - 1] = n_based[i];
        }
        return (converted_b);
    }
    
    int main(void) {
        char *t = convert_dec_to_base(32, "0123456789ABCDEF");
        printf("%c\n", t[1]);
        return (0);
    }
    

    Ce code est fait pour convertir un nombre décimal en une base donnée. le retour est censé être un char* donnant le nombre convertit.

    Sujet résolue l'erreur venait de la ligne : char converted_n[64]; je l'ai transformer en char *converted_n = malloc(64);

    -
    Edité par HugoMarrassé2 26 juin 2020 à 19:35:16

    • Partager sur Facebook
    • Partager sur Twitter
      28 juin 2020 à 10:50:09

      • Je doute fortement que ce soit lors de la compilation (faire planter un compilateur, faut le faire)
      • Sinon, si tu as un crash, utilises un debugger et ça te dira où ça a planté. En développement on ne s'amuse pas à deviner.
      • Partager sur Facebook
      • Partager sur Twitter

      git is great because Linus did it, mercurial is better because he didn't.

        28 juin 2020 à 10:55:44

        Première chose, on tien compte des warning :

        ..\main.c|33|warning: function returns address of local variable [-Wreturn-local-addr]|

        Qui veut dire que tu retournes l'adresse d'une variable locale à la fonction, qui par conséquent n'existe plus en dehors de la fonction.

        • Partager sur Facebook
        • Partager sur Twitter
          28 juin 2020 à 11:14:46

          Une solution traditionnelle est que la fonction retourne l'adresse d'un tableau déclaré comme static .

          char *convert_dec_to_base(int n, char *base) {
          
              static char converted_b[64];
              ...
              return converted_b;
          }
           

          mais ça pose deux problèmes


          - Si on l'utilise deux fois

          char *r1 = convert_dec(....);
          char *r2 = convert_dec(....);
          
          printf("r1=%s r2=%s\n", r1, r2);


          - et, comme la fonction n'est pas réentrante / thread-safe, des problèmes si on l'utilise dans un programme qui lance plusieurs processus légers..

          https://fr.wikipedia.org/wiki/R%C3%A9entrance

          La tradition de C est souvent d'écrire du code qui va vous sauter à la tronche.

          -
          Edité par michelbillaud 28 juin 2020 à 11:17:04

          • Partager sur Facebook
          • Partager sur Twitter

          core dumped lors de la compilation

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown