爲什麼數組開大了codeblock就無法工作了?

程序的運行需要有堆和棧。函數內的普通數組是分配在棧中的,而棧的空間是有限的,所以如果你聲明一個超級大的數組,會導致棧空間不夠用而溢出,因此會停止工作。


如果你想使用大數組,有三個方法。

1.把它放在主函數外面,用全局變量。全局變量是放在數據區的,空間足夠你使用。例如

int m[10000000]; 

int main() 

{ 

    XXX; 

}

你這樣使用,絕對不會再有問題了,可以正常工作。


2. 使用new 或者malloc 動態分配內存,動態分配的內存是在堆中的,堆的空間很大,也足夠你使用。例如:

int main() 

{ 

    int *m; 

    m = (int*)malloc(10000000 * sizeof(int)); 

    XXX; 

    free(m); 

}

這樣也是可以正常運行的,使用堆來分配大數組一定要記得最後free 或者delete 掉你申請的空間,不然會泄漏大量內存。


3. 可以在函數裏面用靜態數組,靜態數組類似於全局變量,會被放在數據區,也可以避免棧空間的耗盡。

int main() 

{ 

    static int m[1000000]; 

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章