簡體   English   中英

為什么我在這段代碼中遇到分段錯誤?

[英]Why am I getting segmentation fault in this code?

為什么我的第一個和第二個程序運行良好,但第三個程序出現分段錯誤? 我認為問題不在於 memory 限制,因為即使long long dp[40][100000]運行良好,但如果我嘗試打印任何值說std::cout << dp[0][0]; 它再次給出錯誤。 我真的很困惑,我試過在 Jdoodle 和 GDB 在線編譯器上編譯這段代碼。 兩者都給出了相同的錯誤。

第一的:

#include<iostream>
#include<vector>


int main(){
    std::vector<long long> price(20);
    std::vector<long long> pages(20);
   
    return 0;
}

第二:

#include<iostream>
#include<vector>


int main(){

    long long dp[20][100000];    
    return 0;
}

第三:

#include<iostream>
#include<vector>


int main(){
    std::vector<long long> price(20);
    std::vector<long long> pages(20);

    long long dp[20][100000];    
    return 0;
}

編輯:我有興趣知道為什么第二個程序運行良好而第三個程序出現分段錯誤。 我認為它們要么都運行,要么都不運行,沒有任何錯誤。

這里有一些其他的選項可以嘗試:

int main()
{
    static long long dp[20][100000];
    std::cout << "Size of dp: " << sizeof(dp) << "\n";
    return 0;
}

在許多平台中,在 function 中聲明為static的變量被放置在不同的區域中,該區域通常比局部變量具有更大的容量。

您可以動態分配:

long long * dp = new long long [20][100000];

動態 memory,又名堆,通常容量很大,肯定大於局部變量區。

您還可以在“全局”空間中分配:

static long long dp[20][100000];
int main()
{
     //...
     return 0;
}

在大多數系統中,全局區域比局部變量區域(也稱為堆棧)大得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM