亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

大數組大小的故障分割

大數組大小的故障分割

C++ C
HUH函數 2019-05-30 16:29:57
大數組大小的故障分割下面的代碼在2GB機器上運行時給了我一個分段錯誤,但在4GB機器上工作。int main(){    int c[1000000];    cout << "done\n";    return 0;}數組的大小只有4MB。在c+中可以使用的數組的大小是否有限制?
查看完整描述

3 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

在C或C+中,通常在堆棧上分配本地對象。在堆棧上分配一個大數組,超出堆棧所能處理的范圍,因此您將獲得一個StackOverflow

不要在堆棧上本地分配它,而是使用其他地方。這可以通過以下兩種方法來實現:全球或者將其分配到全局。如果不使用任何其他編譯單元,則可以使用全局變量。為了確保這不是偶然發生的,添加一個靜態存儲說明符,否則只需使用堆。

這將在BSS段中分配,BSS段是堆的一部分:

static int c[1000000];int main(){
   cout << "done\n";
   return 0;}

這將在數據段中分配,數據段也是堆的一部分:

int c[1000000] = {};int main(){
   cout << "done\n";
   return 0;}

這將在堆中某個未指定的位置分配:

int main(){
   int* c = new int[1000000];
   cout << "done\n";
   return 0;}


查看完整回答
反對 回復 2019-05-30
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

此外,如果在大多數UNIX和Linux系統中運行,可以通過以下命令臨時增加堆棧大?。?/trans>

ulimit -s unlimited

但是要小心,記憶是一種有限的資源,強大的力量帶來了巨大的責任:)


查看完整回答
反對 回復 2019-05-30
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

這里可能只是堆棧溢出。數組太大,無法容納程序的堆棧地址空間。

如果您在堆上分配數組,假設您的機器有足夠的內存,您應該沒事。

int* array = new int[1000000];

但要記住這需要你delete[]數組。更好的解決辦法是使用std::vector<int>并將其調整為1000000元素。


查看完整回答
反對 回復 2019-05-30
  • 3 回答
  • 0 關注
  • 438 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號