配列とポインターをいじっていて、このセグメンテーション違反が発生しました。コード内の「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
この質問にアクセスしていただき、ありがとうございます。