Hva er segmenteringsfeil (kjerne dumpet)?
Jeg prøver å skrive et C-program i linux som har sqrt av argumentet, her er koden:
#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;
}
Etter at jeg har skrevet inn inndataene mine på " shell " " ledeteksten, gir gcc meg følgende feil:
Segmentation fault (core dumped)
88
1
Segmenteringsfeil betyr at du prøvde å få tilgang til minne som du ikke har tilgang til.
Det første problemet er med argumentene til
main
. Funksjonenmain
skal væreint main(int argc, char *argv[])
, og du bør sjekke atargc
er minst 2 før du får tilgang tilargv[1]
.Siden du sender inn en
float
tilprintf
(som forresten blir konvertert til endouble
når den sendes tilprintf
), bør du bruke formatangivelsen%f
. Formatangivelsen%s
er for strenger ('\0'
-terminerte tegnsett).