Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #5395

Re: Interpeting valgrind

From Michael Doubez <michael.doubez@free.fr>
Newsgroups comp.lang.c++
Subject Re: Interpeting valgrind
Date 2011-05-24 01:36 -0700
Organization http://groups.google.com
Message-ID <a6138f2d-ab8f-412a-ae9e-cf2a82cd553d@dn9g2000vbb.googlegroups.com> (permalink)
References (2 earlier) <70a85274-88f9-4a18-b45c-50f05e91773c@l26g2000yqm.googlegroups.com> <cone.1306113809.229005.17178.500@monster.email-scan.com> <irek9g$dno$4@reader1.panix.com> <ireoit$iph$1@hoshi.visyn.net> <irf5kn$at1$1@reader1.panix.com>

Show all headers | View raw


On 24 mai, 04:37, Ruben Safir <ru...@mrbrklyn.com> wrote:
> On Tue, 24 May 2011 00:54:17 +0200, Kai-Uwe Bux wrote:
> > Ruben Safir wrote:
>
> > [...]
> >> But look at this
> >> ==26349== 121,600 (1,600 direct, 120,000 indirect) bytes in 100 blocks
> >> are definitely lost in loss record 17 of 17 ==26349==    at 0x4027400:
> >> operator new(unsigned int) (in
> >> /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==26349==    by
> >> 0x8048E49: creating_int_list() (test_del2.cpp:105) ==26349==    by
> >> 0x8048A89: main (test_del2.cpp:55) ==26349==
>
> >> Ok those lines are as follows - the call function designed to allocate
> >> a list of integers and return them (in this case to main
> >>       std::cout << "CREATING LIST for ARRAY
> >>       -------------------------------\n"; a[i] = creating_int_list();
>
> >> chainlist::List<int> * creating_int_list(){
> >>    // chainlist::List<int>  set = new chainlist::List<int>;
> >>    chainlist::List<int> * set = new chainlist::List<int>; int ran;
> >>    for(int i = 0; i < 100; ++i){
> >>       ran=rand();
> >>       set->insert(ran % 100);
> >>    }
> >>    set->display();
> >>    return set;
> >> }
>
> >> If I chose to delete the returned List pointed to by set, it have to be
> >> done OUT of that function otherwise the function has no point
>
> >> So upon complaint i did just that
>
> >>    for( i=0; i < 100; ++i){
> >>       delete a[i];
> >>    }
> >>    return EXIT_SUCCESS;
>
> >> That had NO IMPACT on the report.
> > [...]
>
> > Then, it looks as though the destructor of chainlist::List<int> is not
> > releasing the resources properly. I looked upthread for that destructor.
> > It relies upon a method remove_front() which you posted as:
>
> >    template<class T>
> >       void List<T>::remove_front(){
> > ////     std::cout << "Removing the Front " << front() << " End of List
> > is "<< endd() << std::endl;
>
> >          if(front() == 0){
> > //          std::cout << "Front  is NULL " << front() << std::endl;
> >             return;
> >          }
> >          if(front() == endd()){
> > //
> > //          std::cout << "Front  is End " << front() << std::endl;
> >             Node<T> * tmp = front();
> >             delete tmp;
> >             front(0);
> >             endd(0);
> >             cursor() = 0;
> >             sizedown();
> >             return;
> >          }
>
> > The code looks incomplete, so I cannot comment on the correctness. But
> > that is, where I would search.
>
>
> I've followed that code very closely and did a shake out of it a month
> ago when I had a double delete.  It definitely walks through the entire
> list and does the deletions, and the nodes have their own destructors.
>
> The pointers themselves can't be deleted and are automatic variable

Well, there are many problem with your code. One is between main() and
creating_int_list() and the other is that you didn't define a copy
operator (and copy constructor) for your list.

int main ( int argc, char *argv[] )
{
    chainlist::Node<std::string> * string_node;
    chainlist::List<int> myintlist;
    // ...
    myintlist = creating_int_list();
    // ...
}

chainlist::List<int>& creating_int_list(){
	chainlist::List<int> * set = new chainlist::List<int>;
	srand(12345);
	int ran;
	for(int i = 0; i < 5000; ++i){
		ran=rand();
		set->insert(ran % 101);
	}
	return *set;
}

I assume you used new here in order to avoid the double delete you
mentioned.

--
Michael

Back to comp.lang.c++ | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Interpeting valgrind Ruben Safir <ruben@mrbrklyn.com> - 2011-05-22 23:03 +0000
  Re: Interpeting valgrind Sam <sam@email-scan.com> - 2011-05-22 18:36 -0500
    Re: Interpeting valgrind mrbrklyn <ceo.brooklyn@gmail.com> - 2011-05-22 17:23 -0700
      Re: Interpeting valgrind Sam <sam@email-scan.com> - 2011-05-22 20:23 -0500
        Re: Interpeting valgrind Ruben Safir <ruben@mrbrklyn.com> - 2011-05-23 21:41 +0000
          Re: Interpeting valgrind Kai-Uwe Bux <jkherciueh@gmx.net> - 2011-05-24 00:54 +0200
            Re: Interpeting valgrind Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 02:37 +0000
              Re: Interpeting valgrind Michael Doubez <michael.doubez@free.fr> - 2011-05-24 01:36 -0700
                Re: Interpeting valgrind Ruben Safir <mrbrklyn@panix.com> - 2011-05-27 18:08 +0000
                Re: Interpeting valgrind Jorgen Grahn <grahn+nntp@snipabacken.se> - 2011-05-27 22:43 +0000
                Re: Interpeting valgrind Ruben Safir <ruben@mrbrklyn.com> - 2011-05-27 23:01 +0000
                Re: Interpeting valgrind Michael Doubez <michael.doubez@free.fr> - 2011-05-29 12:41 -0700
            Re: Interpeting valgrind Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 02:48 +0000

csiph-web