www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/09/06/09:29:43

Xref: news2.mv.net comp.os.msdos.djgpp:8351
From: 101641 DOT 317 AT compuserve DOT com (Martin)
Newsgroups: comp.os.msdos.djgpp
Subject: Re: bug with gcc???
Date: Mon, 26 Aug 1996 15:28:30 +0000
Organization: None
Lines: 64
Distribution: world
Message-ID: <AE47731E966882841@ld51-057.compuserve.com>
References: <199608140425 DOT OAA01240 AT gbrmpa DOT gov DOT au>
NNTP-Posting-Host: ld51-057.compuserve.com
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

You original code should have been:

temp = head_of_list;
while (temp != NULL)
    temp = temp->next;

If your linked list is empty, then temp will be NULL and temp->next could
be anything. If your linked list was empty, temp would be NULL and
temp->next would be garbage (most likely not NULL) and so the first while
loop test will be TRUE, even though the linked list is empty.

This is unlikely to be a bug with gcc. If have used gcc a fair bit with
linked lists and I never had any problems with it. I hope this clears the
matter up. If not e-mail me.

Your modified bit of code still does not cover the case where the linked
list is empty.

Your original code fails because you are setting temp to temp->next, and
then instead of testing to see whether temp is now NULL in the while
construct, you are testing to see whether temp->next is NULL. So in fact
you were testing (temp->next)->next. 

You should modify your second bit of code to take into account an empty
list.



Martin
101641 DOT 317 AT compuserve DOT com

In article <199608140425 DOT OAA01240 AT gbrmpa DOT gov DOT au>,
Leath Muller <leathm AT gbrmpa DOT gov DOT au> wrote:

>I finally got my code to work, and I have to admit I think it's peculiar as
>to why...
>
>The origal code was something like:
>
>	temp = head_of_list;
>	while (temp->next != NULL)
>		temp = temp->next;
>
>This died a horrible death, and yet when I changed the code to the following:
>
>	temp = head_of_list;
>	done = FALSE;
>	while (!done)
>	{
>		if (temp->next == NULL)
>			done = TRUE;
>		else
>			temp = temp->next;
>	}
>
>It works fine...
>
>Is this a bug with gcc??? Or what??? :|
>
>Leathal.




- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019