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實際上是沒有指向那塊內存的,所以在函數返回以後你使用它,程序就崩潰