1. 程式人生 > >函數不要返回局部變量的指針

函數不要返回局部變量的指針

方式 空間 out 分配 大量數據 大量 適合 棧空間 鏈表

結論:普通的變量(非new的變量)都是系統自動分配的,在棧空間(連續分配),無需程序員操作,速度快,但是...空間有限,不適合大量數據,大量的話就需要自己new

new出來的變量是處於大容量的堆空間,分配方式可能類似與鏈表,當然,速度會慢

局部變量中的a數組,在棧中分配了空間,存了0,1,2等數據,函數結束後,返回的地址也確實給了main函數中的p變量,但該內存空間裏可能已經沒有東西了,比較危險

可能你試一試還是能訪問到數據,但那只是沒有釋放,可能在下一個定義的局部變量又用到了該空間,數據覆蓋,就沒了。

int * F1()

{

  int a[10]={0,1,2};

  return a;

}

int main()

{

  int * p =F1();

  cout<<p[0];//危險

}

函數不要返回局部變量的指針