簡體   English   中英

向量中的分割錯誤

[英]Segmentation fault in vector of vector

我正在GeeksForGeeks上練習一個叫做金礦問題的動態規划問題
我的代碼

#include <iostream>
#include<vector>
using namespace std;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int test,i,max_rows,max_columns,temp;
    cin >> test;
    for(i=1;i<=test;i++)
    {
        cin>>max_rows>>max_columns;
        vector<vector<int>> v;//(20,vector<int>(20,0));
        for(int row = 0; row<max_rows; row++)
        {
            v.push_back(vector<int>());
            for(int column = 0; column<max_columns; column++)
            {
                cin>>temp;
                v[row].push_back(temp);
            }
        }
        for(int column = max_columns-1;column>=0;column--)
        {
            for(int row=0; row<max_rows;row++)
            {
                int add;
                if(column>=(max_columns-1))
                    add = 0;
                else if(row==0)
                    add = max(v[row][column+1], v[row+1][column+1]);
                else if(row==(max_rows-1))
                    add = max(v[row-1][column+1], v[row][column+1]);
                else if(row>(max_rows-1))
                    add = 0;
                else
                    add = max(v[row-1][column+1], max(v[row][column+1],v[row+1][column+1]));
                v[row][column]+= add;
            }
        }
        int max_value = 0;
        for(int row = 0;row<max_rows;row++)
            if(max_value<v[row][0])
                max_value = v[row][0];
        
        cout<<max_value<<endl;
    }
    return 0;
}

在一些未知的測試用例中,我遇到了分段錯誤

運行時錯誤:運行時錯誤分段錯誤 (SIGSEGV)

我確信我的代碼沒有訪問任何負索引,因為當我使用下面的構造函數初始化vector<vector<int>>時代碼有效。 (由於問題中矩陣大小的限制,我選擇了20)

vector<vector<int>> v(20,vector<int>(20,0));

我不明白為什么會出現分段錯誤,因為我確保沒有使用 if-else 階梯訪問范圍之外的索引。

                else if(row==0)
                    add = max(v[row][column+1], v[row+1][column+1]);

問題規范明確指出,只有一行是完全有效的。 但是這段代碼假設至少有兩行。

如果輸入是1 1 3 1 2 3 ,這可能(並且可能會)崩潰,這是完全有效的輸入。

暫無
暫無

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

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