Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Free the memory!!!

Free the memory!!!

Scheduled Pinned Locked Moved C / C++ / MFC
performancehelpquestion
6 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    keb
    wrote on last edited by
    #1

    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: } }

    D 1 Reply Last reply
    0
    • K keb

      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: } }

      D Offline
      D Offline
      David Crow
      wrote on last edited by
      #2

      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);
      }
      }

      K 1 Reply Last reply
      0
      • D David Crow

        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);
        }
        }

        K Offline
        K Offline
        keb
        wrote on last edited by
        #3

        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; }

        K D 2 Replies Last reply
        0
        • K keb

          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; }

          K Offline
          K Offline
          keb
          wrote on last edited by
          #4

          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:

          1 Reply Last reply
          0
          • K keb

            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; }

            D Offline
            D Offline
            David Crow
            wrote on last edited by
            #5

            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.

            N 1 Reply Last reply
            0
            • D David Crow

              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.

              N Offline
              N Offline
              Nitron
              wrote on last edited by
              #6

              new is c++ all the way, no MFC required ;) - Nitron


              "Those that say a task is impossible shouldn't interrupt the ones who are doing it." - Chinese Proverb

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • World
              • Users
              • Groups