c語言數組放在main函數里面和外面的區別


最近a算法題的時候碰到一道題:一個數列前三項都為1,之后每項的值等於前三項之和,求第20193024項的最后4位數字。一開始寫的代碼如下:

結果一直爆 Terminated due to signal: SEGMENTATION FAULT (11) 這個錯誤,改了好久沒改出來。之后在stackoverflow上提問才找到自己錯誤所在。

這里先介紹一下棧區(stack),堆區(heap),數據區(data seg)和代碼區。

棧區:由操作系統自動分配釋放,存放函數的參數值,局部變量的值;當不需要時系統會自動清除。

堆區:由new分配的內存塊,不由編譯器管,由應用程序控制(相當於程序員控制)。如果程序員沒有釋放掉,程序結束后,操作系統會自動回收。

數據區:也稱全局區或者靜態區,存放全局的東西類似全局變量。

代碼區:存放執行代碼的地方,類似if else,while,for這種語句。

原來在main函數里面的數組是開在棧區(stack),在函數外面的是開在數據區的。棧區的內存比較小,所以當數組非常大的時候,就會報錯。假如把數組放在數據區就不會出現這個問題,因為數據區的內存很大。

修改后的代碼如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM