0

配列とポインターをいじっていて、このセグメンテーション違反が発生しました。コード内の「ptr」ポインターの下にポインター「p」を移動し、printfステートメントの1つをコメントアウトすると、このコードでこのセグメンテーション違反が発生する理由を説明できますか?

 typedef struct str{
   char* ptr;
  }str_t;

copy(str_t t){
   char a[12];
   char *p;   //  <------ no error when move below ptr pointer 
   char *ptr;

   printf("t= %s p = %d ptr = %d\n", t, p, ptr);

   strcpy(a, t.ptr);
   printf("a = %s %u\n", a, &a);

   strcpy(ptr, t.ptr);
   printf("ptr = %s %u\n", ptr, &ptr); //<--- comment it error disappears

   p= t.ptr;
   printf("p = %s %u",p, &p);  //<--- comment it error disappears
 }

int main ()
{
  str_t t;
  char app[] = "hello";
  char ap[] ="world";

  t.ptr = ap;
  copy(t);

  printf("%s\n", app);

  return 0;
}

ここでコードをコンパイルして結果を確認できます: http://codepad.org/Q7zS8NaC

この質問にアクセスしていただき、ありがとうございます。

4

2 に答える 2