[英]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.