有爬文發現前面有人問過類似問題
但仍然不太清楚
以下舉例說明疑惑的點
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嗎?
為什麼可以正常執行甚至可以修改呢?
希望獲得大大們的解答
非常感謝