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


Groups > linux.debian.user > #275779

Re: OT: Possible memory leak in an exercise of a C handbook

From Franco Martelli <martellif67@gmail.com>
Newsgroups linux.debian.user
Subject Re: OT: Possible memory leak in an exercise of a C handbook
Date 2024-12-16 17:40 +0100
Message-ID <JUmit-hzVD-7@gated-at.bofh.it> (permalink)
References <JUkTn-hz8W-9@gated-at.bofh.it> <JUlFM-hzrJ-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On 16/12/24 at 16:58, Greg Wooledge wrote:
> On Mon, Dec 16, 2024 at 16:05:26 +0100, Franco Martelli wrote:
>> void add_element( unsigned int i )
>> {
>> 	DIGIT *p;
>> 	/* If the first element (the head) has not been
>> 	* created, create it now.
>> 	*/
>> 	if ( head == NULL )
>> 	{
>> 		head = last = (DIGIT *) malloc( sizeof ( DIGIT ) );
>> 		head->dgt = last->dgt = i;
>> 		head->next = head->prev = last->next = last->prev = NULL;
>> 		return;
>> 	}
>> 	/* Otherwise, find the last element in the list */
>> 	for (p = head; p->next != NULL; p = p->next)
>> 		; /* null statement */
>>
>> 	p->next = (DIGIT *) malloc( sizeof ( DIGIT ) );
>> 	p->next->prev = p;
>> 	p->next->dgt = i;
>> 	p->next->next = NULL;
>> 	last = p->next;
>> }
> 
> If you're already keeping a "last" pointer which points to the end of
> the linked list, you don't need that for loop to search for the end of
> the list every time.
> 
> That's got nothing to do with memory leaks.  Just an observation.

Right, thank you

>> void dealloc()
>> {
>> 	for ( const DIGIT *p = head; p->next != NULL; p = p->next )
>> 		if ( p->prev != NULL )
>> 			free( p->prev );
>> 	free( last );
>> }
> 
> I think you might have an off-by-one error in this function.  You stop
> the for loop when p->next == NULL, which means you never enter the body
> during the time when p == last.  Which means you never free the
> second-to-last element in the list.

It is p->prev not p->next, by doing so free() don't apply for the "last" 
element so I've to free apart

> 
> Given a list of 5 items, you will free items 1, 2, 3 (during the loop)
> and 5 (after the loop), but not 4.

OK I'll try some test removing the "if statement"

> Unless I've misread something.  You should definitely double-check me.
> 
Yes, done ;)

-- 
Franco Martelli

Back to linux.debian.user | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-16 16:10 +0100
  Re: OT: Possible memory leak in an exercise of a C handbook Michael Kjörling <c9bc136c6063@ewoof.net> - 2024-12-16 16:50 +0100
    Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-16 17:30 +0100
      Re: OT: Possible memory leak in an exercise of a C handbook Michael Kjörling <c9bc136c6063@ewoof.net> - 2024-12-16 20:50 +0100
        Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-16 22:00 +0100
  Re: OT: Possible memory leak in an exercise of a C handbook Greg Wooledge <greg@wooledge.org> - 2024-12-16 17:00 +0100
    Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-16 17:40 +0100
      Re: OT: Possible memory leak in an exercise of a C handbook Greg Wooledge <greg@wooledge.org> - 2024-12-16 18:00 +0100
        Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-16 21:20 +0100
  Re: OT: Possible memory leak in an exercise of a C handbook Charles Curley <charlescurley@charlescurley.com> - 2024-12-16 19:40 +0100
  Re: OT: Possible memory leak in an exercise of a C handbook Jeffrey Walton <noloader@gmail.com> - 2024-12-16 21:00 +0100
    Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-16 22:40 +0100
      Re: OT: Possible memory leak in an exercise of a C handbook songbird <songbird@anthive.com> - 2024-12-17 05:00 +0100
      Re: OT: Possible memory leak in an exercise of a C handbook Anssi Saari <anssi.saari@debian-user.mail.kapsi.fi> - 2024-12-17 12:30 +0100
        Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-17 15:30 +0100
          Re: OT: Possible memory leak in an exercise of a C handbook Anssi Saari <anssi.saari@debian-user.mail.kapsi.fi> - 2024-12-18 11:20 +0100
        Re: OT: Possible memory leak in an exercise of a C handbook Jean-François Bachelet <jfbachelet@free.fr> - 2024-12-18 05:50 +0100
    Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-17 20:50 +0100
      Re: OT: Possible memory leak in an exercise of a C handbook Greg Wooledge <greg@wooledge.org> - 2024-12-17 22:20 +0100
        Re: OT: Possible memory leak in an exercise of a C handbook <tomas@tuxteam.de> - 2024-12-18 06:10 +0100
          Re: OT: Possible memory leak in an exercise of a C handbook Kevin Chadwick <m8il1ists@gmail.com> - 2024-12-18 11:50 +0100
            Re: OT: Possible memory leak in an exercise of a C handbook <tomas@tuxteam.de> - 2024-12-18 12:00 +0100
      Re: OT: Possible memory leak in an exercise of a C handbook Jeffrey Walton <noloader@gmail.com> - 2024-12-17 22:20 +0100
        Re: OT: Possible memory leak in an exercise of a C handbook Franco Martelli <martellif67@gmail.com> - 2024-12-18 17:00 +0100
          Re: OT: Possible memory leak in an exercise of a C handbook Jeffrey Walton <noloader@gmail.com> - 2024-12-18 17:20 +0100

csiph-web