I dont seem to be able to find the source of the error. The code defines a struct called boolfunc. I define a function to add two boolfunc(s). I get the error: segmentation fault (core dumped). I know what it means but where is the source of the error.
#include<iostream>
#include<vector>
using namespace std;
class boolfunc {
public:
int num_var;
int num_terms;
vector<vector<int> > func;
boolfunc addfunc(boolfunc f1, boolfunc f2);
};
boolfunc addfunc(boolfunc f1, boolfunc f2)
{
boolfunc f3;
f3.func.resize(0);
f3.num_terms = f1.num_terms + f2.num_terms;
int var_dif = f1.num_var - f2.num_var;
if(var_dif >= 0)
{
f3.num_var=f1.num_var;
f3.func.resize(f1.num_var);
f2.num_var=f1.num_var;
f2.func.resize(f1.num_var);
for(int i=0; i<f2.num_terms; ++i)
{
for(int j=0; j<var_dif; ++j)
{
f2.func[i].push_back(-1);
}
}
}
else
{
f3.num_var=f2.num_var;
f3.func.resize(f2.num_var);
f1.num_var=f2.num_var;
f1.func.resize(f2.num_var);
for(int i=0; i<f1.num_terms; ++i)
{
for(int j=0; j<(-1)*(var_dif); ++j)
{
f1.func[i].push_back(-1);
}
}
}
for(int i=0; i<f1.num_terms; ++i)
{
f3.func[i]=f1.func[i];
}
for(int j=0; j<f2.num_terms;++j)
{
f3.func[j+f1.num_terms]=f2.func[j];
}
return f3;
}
int main()
{
boolfunc ef1, ef2, ef3;
ef1.func.resize(0);
ef2.func.resize(0);
ef3.func.resize(0);
cout<< "Input the number of variables of function 1" <<endl;
cin>> ef1.num_var;
cout<< "Input the number of variables of function 2" <<endl;
cin>> ef2.num_var;
cout<< "Input the number of terms of function 1" <<endl;
cin>> ef1.num_terms;
cout<< "Input the number of terms of function 2" <<endl;
cin>> ef2.num_terms;
ef1.func.resize(ef1.num_terms);
for(int i=0; i<ef1.num_terms; ++i)
{
ef1.func[i].resize(ef1.num_var);
for(int j=0; j<ef1.num_var; ++j)
{
cout<<"For function 1, Input the term "<<i+1<<"'s variable "<<j+1<<"'s value:";
cin>>ef1.func[i][j];
}
}
ef2.func.resize(ef2.num_terms);
for(int i=0; i<ef2.num_terms; ++i)
{
ef2.func[i].resize(ef2.num_var);
for(int j=0; j<ef2.num_var; ++j)
{
cout<<"For function 2, Input the term "<<i+1<<"'s variable "<<j+1<<"'s value:";
cin>>ef2.func[i][j];
}
}
ef3 = addfunc(ef1, ef2);
for(int i=0; i<ef3.num_terms; ++i)
{
for(int j=0; j<ef3.num_var; ++j)
{
cout<<ef3.func[i][j]<<' ';
if(j==ef3.num_var -1) cout<<endl;
}
}
return 0;
}
How to approach this:
Build and run
With the example vector (0,0,1,0) your program fails at line 49:
With the error:
Analyse
If you look at the boundary where your program ends and the standard library starts, we immediately see the bug:
As you can see
NULLis passed asthisargument tostd::vector<..>::operator=which means yourf3.funcvector has the wrong size.