gccコンパイルsegmentation faultのエラー

1967 ワード

segmentation faultすなわちセグメントエラーは,一般に不正なアドレス書き込み操作によるものである.
よくあるのは次のような状況です.
1、空のポインタアクセス.
ポインタが空(NULL)の場合、空のポインタの読み書き操作によってsegmentation faultが発生します.
のように
1
2
3 char   *p = NULL; printf ( "%c" ,*p); // *p= 'A' ; // 。
どちらの操作もsegmentation faultになります.
2、ポインタが不正な領域を指した後の書き込み操作.
C言語のポインタは不正な領域を指し、それを書き込むと予知できない結果をもたらし、最も深刻なのはプログラムのクラッシュであり、この時もsegmentation faultである.
たとえば
1
2
3 char   *p =  malloc (100); // 100 p+=1000; // 。 *p= 'a' ; // segmentation fault
または
1
2
3 char   *p =  malloc (100); // free (p); // *p =  'a' ; // p , , segmentation fault。
3、定数空間破壊.
たとえば定数文字列では、コンテンツを変更するとsegmentation faultが表示されます.
のように
1
2 char   *p =  "abcdef" ; //p 。 p[1] =  'M' ; // , segmentation fault
4、一部の古いオペレーティングシステムでは、非整列アクセスによってsegmentation faultが発生する可能性があります.
たとえば
1
2
3
4 int   a[2]; char   *p1 = ( char   *)a; // 。 int   *p2 = ( int   *)(p1+1); // a[0] a[1] , int。  p2 , , 。 *p2=3; // segmentation fault