почему мой код C ++ показывает ошибку сегментации - PullRequest
0 голосов
/ 01 ноября 2019

недавно я пытался решить эту проблему на 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;
}

Всякий раз, когда я запускаю этот код, он показывает ошибку сегментации: ошибка вывода кода

Я пытался немного отладить код, используя cout операторы до и после оператора cin и обнаружили, что cout до выполнения оператора cin >> lines выполняется, но не после него. но сказав, что оператор cin: cin >> t в main выполняется без проблем.

Может кто-нибудь, пожалуйста, помогите мне понять, почему я сталкиваюсь с этой странной ошибкой seg.

1 Ответ

0 голосов
/ 01 ноября 2019

Вы должны указать векторам, сколько элементов хранить:

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.

...