So i was doing some assignment and suddenly facing this "invalid pointer" error when I try to "delete" the earlier assigned weaponBehaviour in the "setweapon" function in class Character . Could someone give some pointers as to what might be the problem ?
#include <iostream>
using namespace std;
class WeaponBehaviour{
public:
virtual void useWeapon() = 0;
};
class SwordBehaviour : public WeaponBehaviour {
public:
void useWeapon()
{
cout << "slash slash"<< endl;
}
};
class BowAndArrowBehavior : public WeaponBehaviour {
public:
void useWeapon()
{
cout << "suss suss"<< endl;
}
};
class KnifeBehavior : public WeaponBehaviour {
public:
void useWeapon()
{
cout << "chak chakk"<< endl;
}
};
class AxeBehavior : public WeaponBehaviour {
public:
void useWeapon()
{
cout << "chop chop"<< endl;
}
};
class Character{
protected:
WeaponBehaviour* weaponBehaviour;
public:
Character(){
}
~Character(){
if(weaponBehaviour != NULL)
{
delete weaponBehaviour;
}
}
void setWeapon(WeaponBehaviour* newWeapon)
{
if(weaponBehaviour!= NULL )
delete weaponBehaviour;
weaponBehaviour = newWeapon;
}
void fight()
{
weaponBehaviour->useWeapon();
}
};
class King : public Character
{
public:
King(){
setWeapon(new SwordBehaviour);
}
};
class Queen : public Character
{
public:
Queen(){
setWeapon(new KnifeBehavior);
}
};
int main() {
King king ;
king.fight();
Queen queen ;
queen.fight();
queen.setWeapon(new AxeBehavior);
queen.fight();
return 0;
}
the error i am getting is
* Error in `Cpp-design-patters/Debug/strategy-pattern': munmap_chunk(): invalid pointer: 0x0000000000400f50 * ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7ff746d757e5] /lib/x86_64-linux-gnu/libc.so.6(cfree+0x1a8)[0x7ff746d82698]