函數傳指針

 void GetMemory(char *p)
{
p
= (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);   
strcpy(str,
"hello world");
printf(str);
}

請問運行Test函數會有什麼樣的結果?

----------------------------------------------------

void GetMemory(char *p)  //只是這樣沒法返回結果的
{
p
= (char *)malloc(100);  //p在函數返回後就銷燬了,並不會改變調用地方的str
}
//應該改成
void GetMemory(char **p) 
{
*p = (char *)malloc(100); 
}

void Test(void)
{
char *str = NULL;
GetMemory(
&str);    //
strcpy(str, "hello world");
printf(str);
}

因爲在C/C++中,實際上只有一種參數傳遞的方式,即傳值調用!你傳遞給GetMemory()一個指針對象,但是在函數內部實際用的是這個指針的副本,假如是p1,這樣分配了內存以後,在函數返回以後,這個p1就不存在了,那塊內存就失控了...,而str實際上是沒有指向那塊內存的,所以在函數返回以後你使用它,程序就崩潰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章