如何解决向量的分割错误
我正在the gold mine problem上练习一个名为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,0));
我无法理解为什么会出现分段错误,因为我无法确保使用if-else梯形图访问该范围之外的索引。
解决方法
else if(row==0)
add = max(v[row][column+1],v[row+1][column+1]);
问题说明清楚地指出,只有一行是完全有效的。但是此代码假定至少有两行。
如果输入为1 1 3 1 2 3
(这是完全有效的输入),则可能(很可能会)崩溃。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。