評價: 0 回應: 0 閱覽: 126
置頂

return pointer to local variable

int *manip()
{
    int ret=5;
    int *ptr = &ret;

    return ptr;    //compiler沒有發出警告
}

int *manip2()
{
   int ret = 3;

   return &ret;   //compiler有發出警告說 address of local variable returned
}

char *manip3()
{
    char ret[]="123";
    char *ptr = ret;

    return ptr;   //正常無警告
}

int main()
{

   char *p3 = mainp3();

   cout<<p3<<endl;  //正常可執行 印出123

   p3[0] = '9';     //正常可修改

   cout<<p3<<endl;  //印出正確 923

}

想請問各位大大,
1.manip()與manip2()是否為一樣的動作?
那為什麼compiler對於manip()不發警告?
是因為間接傳回位址的關係所以偵測不出來嗎?

2.manip3()回傳的不是pointer to local array variable嗎?
為什麼可以正常執行甚至可以修改呢?


希望獲得大大們的解答
非常感謝

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言