Mohit
Mohit

Reputation: 600

Segmentation Fault (SIGSEGV) when getting data as input in the vector of struct

Segmentation Fault (SIGSEGV). Link to code The code gives Segmentation fault error due to the input taken to store the values for vector of struct.

#include<bits/stdc++.h>
using namespace std;
struct s{
    int a;
    int d;
};

int main(){
        int n;
        cin>>n;
        vector<s> v;
        for(int i=0;i<n;i++){
             cin>>v[i].a;
        }
        for(int i=0;i<n;i++){
             cin>>v[i].d;
        }
    return 0;
}

Input is:

6
900  940 950  1100 1500 1800
910 1200 1120 1130 1900 2000

Upvotes: 1

Views: 526

Answers (2)

Damian
Damian

Reputation: 4641

Here is the code that works. I specify the size of the vector when I construct it.

    vector<s> v(n);

Compile code:

#include<bits/stdc++.h>
using namespace std;
struct s{
    int a;
    int d;
};

int main(){
        int n;
        cin>>n;
        vector<s> v(n);
        for(int i=0;i<n;i++){
             cin>>v[i].a;
        }
        for(int i=0;i<n;i++){
             cin>>v[i].d;
        }
    return 0;
}

Upvotes: 1

eerorika
eerorika

Reputation: 238401

The problem is that you're accessing the vector outside of its bounds. The vector is empty, but v[i] tries to access elements of the vector that don't exist. Therefore the behaviour of the program is undefined.

I suspect that you may have intended to use the vector's constructor that takes a count of elements as an argument.

Upvotes: 2

Related Questions