From: Thomas Demmer Newsgroups: comp.os.msdos.djgpp Subject: insque() flaw? Date: Thu, 16 Oct 1997 09:11:03 +0200 Organization: Lehrstuhl fuer Stroemungsmechanik Lines: 49 Message-ID: <3445BE07.EFCFA3C1@LSTM.Ruhr-UNI-Bochum.De> NNTP-Posting-Host: c64.lstm.ruhr-uni-bochum.de Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk This may be bug in insque() or just a misundertanding the concept from my point of view. Insque() is meant to build double linked lists, so I started with something like this: stuct qelem root, *data; /* ** Empty List */ root.q_forw = root.q_back = NULL; /* ** Insert a node */ data = malloc(sizeof(*data)); insque(data, &root); and ended up with a SIGSEGV. The reason is quite simple. insque() wants to set root->q_forw->q_back = q which is wrong in this case, because root->q_forw == NULL. The reason for using NULL was just to have an idea when the list end is reached, which is a quite common idea to my knowledge. The work-around is using &root as a sentinel for list end and beginning, but it still annoys me ;-) I couldn't find a hint in the docs and neither in my UNIX man pages. But the code runs under AIX, which may or may not be an indication... IBM, OTOH, forgot the definition of qelem... -- Ciao Tom ************************************************************* * Thomas Demmer * * Lehrstuhl fuer Stroemungsmechanik * * Ruhr-Uni-Bochum * * Universitaetsstr. 150 * * D-44780 Bochum * * Tel: +49 234 700 6434 * * Fax: +49 234 709 4162 * * http://www.lstm.ruhr-uni-bochum.de/~demmer * *************************************************************