Qu'est-ce qu'un défaut de segmentation (core dumped) ?

J'essaie d'écrire un programme C sous linux qui a le sqrt de l'argument, voici le code :

#include<stdlib.h>
#include<stdio.h>
#include<math.h>

int main(char *argv[]){
    float k;
    printf("this is consumer\n");
    k=(float)sqrt(atoi(argv[1]));
    printf("%s\n",k);
    return 0;
}

Après avoir tapé mon entrée à l'invite "shell> &quot ;, gcc me donne l'erreur suivante :

Segmentation fault (core dumped)
Solution

Un défaut de segmentation signifie que vous avez essayé d'accéder à une mémoire à laquelle vous n'avez pas accès.

Le premier problème concerne les arguments de votre fonction main. La fonction main devrait être int main(int argc, char *argv[]), et vous devriez vérifier que argc vaut au moins 2 avant d'accéder à argv[1].

De plus, puisque vous passez un float à printf (qui, soit dit en passant, est converti en double lorsqu'il est passé à printf), vous devriez utiliser le spécificateur de format %f. Le spécificateur de format %s est destiné aux chaînes de caractères (tableaux de caractères terminés par '\0').

Commentaires (3)