Method:
vector <Expression*> Addition :: getAdditiveTerms() {
vector <Expression*> terms;
if((obj1->getType() == "Addition" || obj1->getType() == "Subtraction") && (obj2->getType() == "Addition" || obj2->getType() == "Subtraction")) {
if(obj1->getLeftSide()->getType() == "Integer") {
Expression* LL = obj1->getLeftSide();
terms.push_back(LL);
delete obj1->getLeftSide();
}
if(obj1->getRightSide()->getType() == "Integer") {
Expression* LR = obj1->getRightSide();
terms.push_back(LR);
delete obj1->getRightSide();
}
if(obj2->getLeftSide()->getType() == "Integer") {
Expression* RL = obj2->getLeftSide();
terms.push_back(RL);
delete obj2->getLeftSide();
}
if(obj2->getRightSide()->getType() == "Integer") {
Expression* RR = obj2->getRightSide();
terms.push_back(RR);
delete obj2->getRightSide();
}
}
return terms;
}
When I create a an object and try to access this method, I get the following error:
ExpressionCalculator(19982,0x7fff8b43e380) malloc: * error for object 0x7ffedfe729a8: pointer being freed was not allocated * set a breakpoint in malloc_error_break to debug
Main where object is being created:
int main() {
Integer integ1("1");
Integer integ2("-2");
Integer* integer1 = &integ1;
Integer* integer2 = &integ2;
Addition add1(integer1, integer2);
Integer integ3("6");
Integer integ4("-9");
Integer* integer3 = &integ3;
Integer* integer4 = &integ4;
Addition add2(integer3, integer4);
Addition* addit1 = &add1;
Addition* addit2 = &add2;
Addition add3(addit1, addit2);
vector <Expression*> addTerms = add3.getAdditiveTerms();
for(int i = 0; i < addTerms.size(); i++)
cout << addTerms[i]->getValue() << endl;
}
Now, I realize the way I'm getting these pointers into the constructor looks a little odd, I had to make pointers in order to test it in the fashion that the parameters will be passed throughout the program. Any ideas why I'm getting this error? I'm sure it has to do with an ill-defined pointer. Thanks!