2012年6月14日 星期四

解惑


//code 1----------------------------------------------// fail

char str1[] = "This is a string";

char *p = str1;
char **pp;

int main()
{
    *pp = p; //fail // pp = &p; //success


    printf("str1 = %s\n" , str1);
printf("p = %s\n" , p);
    return 0;
}

//code 2----------------------------------------------// success

char str1[] = "This is a string";
int main()
{
char *p = str1;
char **pp;

    *pp = p;

    printf("str1 = %s\n" , str1);
printf("p = %s\n" , p);
    printf("*pp = %s\n", *pp);
    return 0;
}


雖然第二個程式不會當機
但是兩個程式都有瑕疵

在於*pp = p;
pp初始時沒有給予數值, 所以存的是一個亂數, 此亂數代表某個位址

所以這個指令*pp = p
表示將p存的(位址)資料存到pp指向的(亂數)位址

該衰毛的位址資料就會被覆寫造成錯誤

沒有留言: