Free the memory!!!
-
Ok... Can anybody tell me what I am doing wrong here please:confused:? struct MyStruct1 { int m_integer; } struct MyStruct2 { MyStruct1 *pStruct1; } MyStruct2 m_struct2; MyObject::MyObject() { m_struct2.pStruct1 = NULL; m_struct2.pStruct1 = (MyStruct1 *) malloc(10); } MyObject::~MyObject() { if(m_struct2.pStruct1) { free(struct2.pStruct1); <- I get error here....:eek: } }
-
Ok... Can anybody tell me what I am doing wrong here please:confused:? struct MyStruct1 { int m_integer; } struct MyStruct2 { MyStruct1 *pStruct1; } MyStruct2 m_struct2; MyObject::MyObject() { m_struct2.pStruct1 = NULL; m_struct2.pStruct1 = (MyStruct1 *) malloc(10); } MyObject::~MyObject() { if(m_struct2.pStruct1) { free(struct2.pStruct1); <- I get error here....:eek: } }
You failed to mention if the error was compilation or run-time. Given just the code you provided, it has several compile errors. Those can be fixed with:
struct MyStruct1
{
int m_integer;
};struct MyStruct2
{
MyStruct1 *pStruct1;
};MyStruct2 m_struct2;
class MyObject
{
public:
MyObject();
~MyObject();
};MyObject::MyObject()
{
m_struct2.pStruct1 = NULL;// unnecessary
m_struct2.pStruct1 = (MyStruct1 *) malloc(10);
}MyObject::~MyObject()
{
if(m_struct2.pStruct1)
{
free(m_struct2.pStruct1);
}
} -
You failed to mention if the error was compilation or run-time. Given just the code you provided, it has several compile errors. Those can be fixed with:
struct MyStruct1
{
int m_integer;
};struct MyStruct2
{
MyStruct1 *pStruct1;
};MyStruct2 m_struct2;
class MyObject
{
public:
MyObject();
~MyObject();
};MyObject::MyObject()
{
m_struct2.pStruct1 = NULL;// unnecessary
m_struct2.pStruct1 = (MyStruct1 *) malloc(10);
}MyObject::~MyObject()
{
if(m_struct2.pStruct1)
{
free(m_struct2.pStruct1);
}
}Ok.. You are right.. I didn't have enough info.. Here is what I use and I am getting run time error..'Debug error.. DAMAGE: after normal block(#42) at 0x002FO7EO.' and it is failing at free(m_Struct2.pStruct1); What do you think that I am doing wrong??:confused: #include #include #include struct MyStruct1 { int m_interger; int m_interger2; int m_interger3; int m_interger4; }; struct MyStruct2 { MyStruct1 *pStruct1; }; class MyObject { public: MyObject(); ~MyObject(); MyStruct2 m_Struct2; }; MyObject::MyObject() { m_Struct2.pStruct1 = (MyStruct1 *) malloc(10); m_Struct2.pStruct1->m_interger = 5; m_Struct2.pStruct1->m_interger2 = 5; m_Struct2.pStruct1->m_interger3 = 5; m_Struct2.pStruct1->m_interger4 = 5; } MyObject::~MyObject() { if(m_Struct2.pStruct1) free(m_Struct2.pStruct1); m_Struct2.pStruct1 = NULL; } main() { MyObject *myObject; myObject = new MyObject; delete(myObject); return 0; }
-
Ok.. You are right.. I didn't have enough info.. Here is what I use and I am getting run time error..'Debug error.. DAMAGE: after normal block(#42) at 0x002FO7EO.' and it is failing at free(m_Struct2.pStruct1); What do you think that I am doing wrong??:confused: #include #include #include struct MyStruct1 { int m_interger; int m_interger2; int m_interger3; int m_interger4; }; struct MyStruct2 { MyStruct1 *pStruct1; }; class MyObject { public: MyObject(); ~MyObject(); MyStruct2 m_Struct2; }; MyObject::MyObject() { m_Struct2.pStruct1 = (MyStruct1 *) malloc(10); m_Struct2.pStruct1->m_interger = 5; m_Struct2.pStruct1->m_interger2 = 5; m_Struct2.pStruct1->m_interger3 = 5; m_Struct2.pStruct1->m_interger4 = 5; } MyObject::~MyObject() { if(m_Struct2.pStruct1) free(m_Struct2.pStruct1); m_Struct2.pStruct1 = NULL; } main() { MyObject *myObject; myObject = new MyObject; delete(myObject); return 0; }
Actually, I think as I type it out onto the editor, I saw one problem with my logic. m_Struct2.pStruct1 = (MyStruct1 *) malloc(10); <- Bad isn't it? X| :omg: That ought to be m_Struct2.pStruct1 = (MyStruct1 *) malloc(sizeof(MyStruct1) * 10); Otherwise m_Struct2 is not getting created enough space for it's field.. Silly me..:omg: Thanks for the heads up.:cool:
-
Ok.. You are right.. I didn't have enough info.. Here is what I use and I am getting run time error..'Debug error.. DAMAGE: after normal block(#42) at 0x002FO7EO.' and it is failing at free(m_Struct2.pStruct1); What do you think that I am doing wrong??:confused: #include #include #include struct MyStruct1 { int m_interger; int m_interger2; int m_interger3; int m_interger4; }; struct MyStruct2 { MyStruct1 *pStruct1; }; class MyObject { public: MyObject(); ~MyObject(); MyStruct2 m_Struct2; }; MyObject::MyObject() { m_Struct2.pStruct1 = (MyStruct1 *) malloc(10); m_Struct2.pStruct1->m_interger = 5; m_Struct2.pStruct1->m_interger2 = 5; m_Struct2.pStruct1->m_interger3 = 5; m_Struct2.pStruct1->m_interger4 = 5; } MyObject::~MyObject() { if(m_Struct2.pStruct1) free(m_Struct2.pStruct1); m_Struct2.pStruct1 = NULL; } main() { MyObject *myObject; myObject = new MyObject; delete(myObject); return 0; }
It looks like you need to use new instead of malloc() so that MyStruct1's constructor gets called. Maybe that's just for MFC, however, and not C++ in general.
-
It looks like you need to use new instead of malloc() so that MyStruct1's constructor gets called. Maybe that's just for MFC, however, and not C++ in general.