簡體   English   中英

在C ++中以2D數組輸入輸入時出現分段錯誤

[英]Segmentation fault while taking input in a 2d array in C++

每當我嘗試讀取輸入錯誤時,計算機都會出現分段錯誤。 我的輸入如下所示:

7
1 2 3
2 3 1
1 4 4
4 6 7
7 5 2
3 5 1
4 5 5

基本上,我想將上述輸入直接存儲到2D數組中。 第一列是X坐標,第二列是Y坐標,最后是存儲在2D數組的(X,Y)COORDINATE中的值。

long leastTimeToInterview(int n, int k, int m) {
    int a[m+1][m+1];
    int i=0,x=0,y=0;

    for (i=1;i<=m;i++){
        scanf("%d %d",&x,&y);
        scanf("%d",&a[x][y]);
        a[y][x]=a[x][y];

    } 
    return 11; 
}

就像提到的rustyx一樣,此錯誤可能是堆棧溢出的結果。

最簡單的方法是減小數組的大小,或使用其他數據結構來動態分配內存,如std::vectorstd::liststd::map

在您的示例中,它看起來好像大多數數組都是空的。 在這種情況下,我建議使用std::map 在此問題中還討論了有關內存使用的其他一些優化: 當在95%的情況下值為0或1時,是否可以對很大的數組進行隨機訪問優化?

C ++的類型系統中沒有動態調整大小的數組,因此您需要將其更改為諸如std :: vector之類的東西。 另一個問題是,即使您的編譯器支持動態大小的數組,您仍然會發生堆棧溢出(至少很有可能)。 因此,我建議您將功能更改為以下形式:

long leastTimeToInterview(int n, int k, int m) {
    std::vector<std::vector<int>> a(m + 1, std::vector<int>(m + 1));
    int i = 0, x = 0, y = 0;

    for(i = 1; i <= m; i++) {
        scanf("%d %d", &x, &y);
        scanf("%d", &a[x][y]);
        a[y][x] = a[x][y];
    }
    return 11;
}

您的應用程序邏輯中可能仍然存在錯誤,但是您的示例和說明沒有提供足夠的信息來說明這一點。

暫無
暫無

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

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