为什么我的c++代码显示分段错误



最近我试图在codechef上解决这个问题-https://www.codechef.com/problems/SUMTRIAN。该问题的自定义输入详细信息如下。

自定义输入细节图像

我为这个问题设计了以下代码

#include <bits/stdc++.h>
using namespace std;
void func()
{  
vector<vector<int>> t;
int i=0,j=0,rows=0;
cin>>rows; // to input no. of rows 
// i think for this cin it shows a seg fault
// and also maybe for other cin lines
for(i=0;i<rows;i++)//input the elements from custom input and store in 2D       
for(j=0;j<=i;j++) //matrix
cin>>t[i][j];
for(i=rows-2;i>=0;i--)
for(j=0;j<=i;j++)
t[i][j]=t[i][j]+max(t[i+1][j],t[i+1][j+1]);
cout<<endl<<t[0][0]; //element at this position will have max sum
}
int main() {
int t=0;
cin>>t;
while(t--)//for t test cases
func();
return 0;
}

每当我运行此代码时,它都会显示分段错误:代码输出错误

我试着在cin语句之前和之后使用cout声明对代码进行一些调试,发现cin>>rows之前的coutin>>t可以毫无问题地执行。

有人能帮我理解为什么我会遇到这种奇怪的seg故障吗。

您必须告诉向量要存储多少元素:

void func()
{  
int i=0,j=0,rows=0;
cin>>rows;
vector<vector<int>> t(rows);
for(i=0;i<rows;i++)  
{
t[i].resize(rows);
for(j=0;j<=i;j++) 
cin >> t[i][j];
}
...

如果您不需要行x行的方形矩阵,请使用i+1调用resize。

相关内容

  • 没有找到相关文章

最新更新