天天看點

指針作為傳回值

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;       //防止記憶體洩露!
}
           

繼續閱讀