1. 程式人生 > >通過2個例項理解:不要返回指向棧記憶體的指標

通過2個例項理解:不要返回指向棧記憶體的指標

(1)
char *GetMemory(void)
{
   char str[]="hello world"; //str陣列建立在棧上,並用字串常量來初始化.
//str是在棧上分配的記憶體,函式結束後將會自動釋放,str指向的記憶體區域內容不是"hello world",而是未知的內容。
   return str; //該句存在隱患,str指向的記憶體單元將被釋放
}
(2)
const char *Func(void)
{
   char *pCh="Test String";  //字串常量存放在程式的靜態資料區,
//pCh指標雖然是在棧上定義的,但當函式返回時,它指向的那個記憶體地址,也就是字串“Test String”還是存在的,並沒有被釋放
    return pCh;  //返回字串常量的地址,沒有問題
}