Détails
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> " ;, gcc me donne l'erreur suivante :
Segmentation fault (core dumped)
88
1
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 fonctionmain
devrait êtreint main(int argc, char *argv[])
, et vous devriez vérifier queargc
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 endouble
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'
).