Message-ID: <3632CF43.4F90B4B0@stargate.net> From: John Kissell X-Mailer: Mozilla 4.02 [en] (Win16; I) MIME-Version: 1.0 Newsgroups: comp.os.msdos.djgpp Subject: Re: Nested structure problem (maybe)? References: <36318BAA DOT 91343991 AT stargate DOT net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 56 Date: Sun, 25 Oct 1998 00:12:03 -0700 NNTP-Posting-Host: 209.166.130.69 X-Complaints-To: abuse AT sgi DOT net X-Trace: news.sgi.net 909288528 209.166.130.69 (Sun, 25 Oct 1998 00:08:48 EDT) NNTP-Posting-Date: Sun, 25 Oct 1998 00:08:48 EDT Organization: Stargate Industries, LLC. To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com To update all who read or replied... Using 'assert' as George Foot suggested, I found that the FILE_TYPE structure was created as a singlely linked list when the ParseFile() function expected the structure to be a circular linked list (ie. last_record->next = NULL vs. last_record->next = first_record). Yes, just a stupid mistake, but a lesson that debuggers wont allways catch mistakes involving a loop where all iterations but one (the last in this case) are valid. Thanks, John Kissell John Kissell wrote: > > The following is a snippet from a 'C' file that contains many long and > nested structures. By nested, a main structure 'OBJECT_TYPE *list' > contains pointers to other structures which contain pointers to lesser > structures and so on. It compiles and links with no errors *or warnings* > but I get a SIGSEGV at the 'p=record->text;' line. The rub is that Rhide > in 'run to cursor' and then debug shows that record->text contains a > valid string of type char, and in fact, the correct string in the > correct place for the file that was read in as a test of the code! But > the program when run unhindered under Rhide stops with a SIGSEGV at the > 'p = record->text;' line? > > > int ParseFile(OBJECT_TYPE *list) > { char command[6][2] = {"Z","X","K","I","T","G"}, > *p,*p1,*p2,tmp[256],tmp2[256]; > int n,G; > double CX=0,CY=0,CI=0,CJ=0,X=0,Y=0,I=0,J=0,arc,start,inc,r; > RECORD_TYPE *record; > OBJECT_TYPE *graph_win; > > graph_win=TagSearch(list,GRAPH_WIN); /* in debug this points to the > correct data */ > record=graph_win->file->records; /* this also */ > vflag.max=vflag.graph=0; /* and this */ > view_count=0; /* I'll get rid of this global > eventually */ > > do{ > X=CX; Y=CY; > vflag.park = 0; /* this one too */ > p = record->text; /******* SIGSEGV first flagged here ******/ > p1 = tmp; /* Run to cursor at the *end* of this line and then > debug in Rhide shows that record->text contains exactly what it is > supposed to? >