其實一個很簡單的問題,卻現在纔想明白,真suck...
相信我們都知道傳值調用參數時,不改變實際參數的值。原理:形參是實參的一個copy(副本),而不是指向同一塊內存地址。於是用指針或引用就可以解決這個問題,大多數時候還會節省內存開銷,因爲不用作副本拷貝。
這樣一個例子:
void test(char *ps)
{
ps = (char *)malloc(10*sizeof(char));
}
int main(void)
{
char *str = NULL;
test(str);
strcpy(str, "abcd");
cout << str << endl;
return 0;
}
用指針作爲參數,在函數內部申請動態內存,結果該程序會崩潰。
原因其實很簡單,ps申請了內存,也就是改變了ps這個副本的內容(即申請的動態內存地址),但函數返回了,原形參ps的內容沒有任何改變,就如同上述的傳值一樣,ps的內容仍爲NULL,於是出錯。
而且不但出錯,該程序還會出現內存泄露的問題,因爲malloc的這塊內存未釋放,也無法釋放了。