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. memory leak in the code?

memory leak in the code?

Scheduled Pinned Locked Moved C / C++ / MFC
performancequestion
51 Posts 5 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.
  • G Offline
    G Offline
    George_George
    wrote on last edited by
    #1

    Hello everyone, Should I delete memory pointed by pointer a if there is bad_alloc when allocating memory in memory pointed by pointer b? I am not sure whether there will be memory leak if I do not delete a.try { a = new int [N]; b = new int [M]; } catch (bad_alloc) { // if a success, but b fail, should we try to delete[] a here to avoid memory leak? }
    thanks in advance, George

    CPalliniC E P H 4 Replies Last reply
    0
    • G George_George

      Hello everyone, Should I delete memory pointed by pointer a if there is bad_alloc when allocating memory in memory pointed by pointer b? I am not sure whether there will be memory leak if I do not delete a.try { a = new int [N]; b = new int [M]; } catch (bad_alloc) { // if a success, but b fail, should we try to delete[] a here to avoid memory leak? }
      thanks in advance, George

      CPalliniC Online
      CPalliniC Online
      CPallini
      wrote on last edited by
      #2

      You have always to do your cleanup stuff! :)

      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
      [my articles]

      In testa che avete, signor di Ceprano?

      G E 2 Replies Last reply
      0
      • CPalliniC CPallini

        You have always to do your cleanup stuff! :)

        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
        [my articles]

        G Offline
        G Offline
        George_George
        wrote on last edited by
        #3

        Thanks CPallini! I think you mean we have to delete A, right? regards, George

        CPalliniC 1 Reply Last reply
        0
        • G George_George

          Thanks CPallini! I think you mean we have to delete A, right? regards, George

          CPalliniC Online
          CPalliniC Online
          CPallini
          wrote on last edited by
          #4

          Yes. :)

          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
          [my articles]

          In testa che avete, signor di Ceprano?

          G 1 Reply Last reply
          0
          • G George_George

            Hello everyone, Should I delete memory pointed by pointer a if there is bad_alloc when allocating memory in memory pointed by pointer b? I am not sure whether there will be memory leak if I do not delete a.try { a = new int [N]; b = new int [M]; } catch (bad_alloc) { // if a success, but b fail, should we try to delete[] a here to avoid memory leak? }
            thanks in advance, George

            E Offline
            E Offline
            Eytukan
            wrote on last edited by
            #5

            Hello George, nice to see you again. But this time I've got a question for you. Straight to you. Why do are you acting 'quick'-judgemental before someone could actually reply you fully?:~ See here[^] And I've seen many times , anybody who replies to your thread gets a 3 vote. Immediately. Is it a token of acknowledgment to say that you've read the message? :-). I'm really not hurt by that but I'm finding it funny! Why do you do that?


            OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

            1 Reply Last reply
            0
            • G George_George

              Hello everyone, Should I delete memory pointed by pointer a if there is bad_alloc when allocating memory in memory pointed by pointer b? I am not sure whether there will be memory leak if I do not delete a.try { a = new int [N]; b = new int [M]; } catch (bad_alloc) { // if a success, but b fail, should we try to delete[] a here to avoid memory leak? }
              thanks in advance, George

              P Offline
              P Offline
              pierre_ribery
              wrote on last edited by
              #6

              In a case like this you should initialize both a and b to 0 before the try clause. You cannot delete a or b at this stage, I assume you will need to use them later, or what was the purpose of allocating them? int* a = NULL; int* b = NULL; try { a = new int [N]; b = new int [M]; } catch (bad_alloc) { // Tell the user if a or b failed... } // Do some stuff on a or b // Now delete if they are allocated if(a) delete a[]; if (b) delete b[]; Thanks!

              G 1 Reply Last reply
              0
              • G George_George

                Hello everyone, Should I delete memory pointed by pointer a if there is bad_alloc when allocating memory in memory pointed by pointer b? I am not sure whether there will be memory leak if I do not delete a.try { a = new int [N]; b = new int [M]; } catch (bad_alloc) { // if a success, but b fail, should we try to delete[] a here to avoid memory leak? }
                thanks in advance, George

                H Offline
                H Offline
                Hamid Taebi
                wrote on last edited by
                #7

                Why you didnt use like this code try { int * a= new int[N]; int * b= new int[M]; } catch (bad_alloc&) { cout <<"Error allocating memory!"; }

                E G 2 Replies Last reply
                0
                • H Hamid Taebi

                  Why you didnt use like this code try { int * a= new int[N]; int * b= new int[M]; } catch (bad_alloc&) { cout <<"Error allocating memory!"; }

                  E Offline
                  E Offline
                  Eytukan
                  wrote on last edited by
                  #8

                  huh Hamid! :| it's simply because he should have put it like:

                  int* a;
                  int* b;

                  try { a= new int[N]; b= new int[M]; } catch (bad_alloc&) { cout <<"Error allocating memory!"; } wake up! :)


                  OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

                  H P 2 Replies Last reply
                  0
                  • CPalliniC CPallini

                    You have always to do your cleanup stuff! :)

                    If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                    [my articles]

                    E Offline
                    E Offline
                    Eytukan
                    wrote on last edited by
                    #9

                    But I suggest he should do something like this : if(pMyStuff!=NULL) { delete pMyStuff; } :cool:


                    OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

                    CPalliniC 1 Reply Last reply
                    0
                    • E Eytukan

                      huh Hamid! :| it's simply because he should have put it like:

                      int* a;
                      int* b;

                      try { a= new int[N]; b= new int[M]; } catch (bad_alloc&) { cout <<"Error allocating memory!"; } wake up! :)


                      OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

                      H Offline
                      H Offline
                      Hamid Taebi
                      wrote on last edited by
                      #10

                      Yeah it was a quick sample. ;)

                      1 Reply Last reply
                      0
                      • E Eytukan

                        huh Hamid! :| it's simply because he should have put it like:

                        int* a;
                        int* b;

                        try { a= new int[N]; b= new int[M]; } catch (bad_alloc&) { cout <<"Error allocating memory!"; } wake up! :)


                        OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

                        P Offline
                        P Offline
                        pierre_ribery
                        wrote on last edited by
                        #11

                        Not like that, see my earlier post. Always initialize pointers!! In this case set them to NULL(0). int* a = NULL; int* b = NULL;

                        E 1 Reply Last reply
                        0
                        • P pierre_ribery

                          Not like that, see my earlier post. Always initialize pointers!! In this case set them to NULL(0). int* a = NULL; int* b = NULL;

                          E Offline
                          E Offline
                          Eytukan
                          wrote on last edited by
                          #12

                          Who said I didn't do it? I'm a c++ programmer. class myclass { int* a; int* b; myclass() { a= NULL; b= NULL; } } ;P


                          OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

                          P 1 Reply Last reply
                          0
                          • E Eytukan

                            But I suggest he should do something like this : if(pMyStuff!=NULL) { delete pMyStuff; } :cool:


                            OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

                            CPalliniC Online
                            CPalliniC Online
                            CPallini
                            wrote on last edited by
                            #13

                            And you are right! :-D

                            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                            [my articles]

                            In testa che avete, signor di Ceprano?

                            1 Reply Last reply
                            0
                            • E Eytukan

                              Who said I didn't do it? I'm a c++ programmer. class myclass { int* a; int* b; myclass() { a= NULL; b= NULL; } } ;P


                              OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus Best wishes to Rexx[^]

                              P Offline
                              P Offline
                              pierre_ribery
                              wrote on last edited by
                              #14

                              Your code said it. Anyway, I think it is pretty important to show it in the code as well.

                              1 Reply Last reply
                              0
                              • P pierre_ribery

                                In a case like this you should initialize both a and b to 0 before the try clause. You cannot delete a or b at this stage, I assume you will need to use them later, or what was the purpose of allocating them? int* a = NULL; int* b = NULL; try { a = new int [N]; b = new int [M]; } catch (bad_alloc) { // Tell the user if a or b failed... } // Do some stuff on a or b // Now delete if they are allocated if(a) delete a[]; if (b) delete b[]; Thanks!

                                G Offline
                                G Offline
                                George_George
                                wrote on last edited by
                                #15

                                Thanks pierre_ribery, I want to confirm with you that your point is we need to delete a or b if they are successful allocated, even if bad_alloc happens (may be caused by other statements), right? regards, George

                                P 1 Reply Last reply
                                0
                                • H Hamid Taebi

                                  Why you didnt use like this code try { int * a= new int[N]; int * b= new int[M]; } catch (bad_alloc&) { cout <<"Error allocating memory!"; }

                                  G Offline
                                  G Offline
                                  George_George
                                  wrote on last edited by
                                  #16

                                  Hi Hamid, I am confused. My question is about whether we need to delete a or b if bad_alloc happens, does your reply has anything related to my question? :-) regards, George

                                  H 1 Reply Last reply
                                  0
                                  • CPalliniC CPallini

                                    Yes. :)

                                    If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                    [my articles]

                                    G Offline
                                    G Offline
                                    George_George
                                    wrote on last edited by
                                    #17

                                    Thanks for your confirmation, CPallini! regards, George

                                    1 Reply Last reply
                                    0
                                    • G George_George

                                      Hi Hamid, I am confused. My question is about whether we need to delete a or b if bad_alloc happens, does your reply has anything related to my question? :-) regards, George

                                      H Offline
                                      H Offline
                                      Hamid Taebi
                                      wrote on last edited by
                                      #18

                                      My reply was for check does it with success or no (and my suggestion is when you want to allocate or convert use of try/catch block) and when you got error means that it doesnt allocate any thing to variable.

                                      G 1 Reply Last reply
                                      0
                                      • G George_George

                                        Thanks pierre_ribery, I want to confirm with you that your point is we need to delete a or b if they are successful allocated, even if bad_alloc happens (may be caused by other statements), right? regards, George

                                        P Offline
                                        P Offline
                                        pierre_ribery
                                        wrote on last edited by
                                        #19

                                        Yes that was exactly my point! If you have allocated memory, then you have to delete it. Therefore it is vital to initialize your pointers to 0 before using them. Cheers, Pierre

                                        G 1 Reply Last reply
                                        0
                                        • H Hamid Taebi

                                          My reply was for check does it with success or no (and my suggestion is when you want to allocate or convert use of try/catch block) and when you got error means that it doesnt allocate any thing to variable.

                                          G Offline
                                          G Offline
                                          George_George
                                          wrote on last edited by
                                          #20

                                          Thanks Hamid, I have developed a couple of samples, which specific case do you think I need to check? regards, George

                                          H 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