1、當使用指針做為函數的傳回值時,主函數處的char *p;将獲得調用函數char *pf;的值,即一個位址值,如oxAE72。此時需要我們注意的是該位址值所指向的空間是否存在(即已向作業系統聲明注冊,不會被釋放,即可能被其他操作修改);
2、使用棧記憶體傳回指針是明顯錯誤的,因為棧記憶體将在調用結束後自動釋放,進而主函數使用該位址空間将很危險。
例如:
char* GetMemory()
{
char p[] = "hi";
return p;
}
void main()
{
char *str = GetMemory(); //出錯! 得到一塊已釋放的記憶體
printf(str);
}
3、使用堆記憶體傳回指針是正确的,但是注意可能産生記憶體洩露問題,在使用完畢後主函數中釋放該段記憶體。
例如:
char* GetMemory()
{
char *p = new char[];
return p;
}
void main()
{
char *str = GetMemory();
delete [] str; //防止記憶體洩露!
}