From: "Jason Ragsdale" <jrags@YAHOO.COM>
> Program received signal SIGSEGV, Segmentation fault.
> 0x080c8cf5 in save_char_vars (ch=0x84157d0) at
> dg_scripts.c:3127
> 3127 if (ch->script->global_vars == NULL) return;
>
> backtrace
> (gdb) bt
> #0 0x080c8cf5 in save_char_vars (ch=0x84157d0) at
> dg_scripts.c:3127
> #1 0x08086bea in save_char (ch=0x84157d0,
> load_room=-1) at db.c:2250
For the people unfamiliar with save_char_vars() here's the
relevant parts of the function:
...
/* immediate return if no script (and therefore no variables) structure */
/* has been created. this will happen when the player is logging in */
if (SCRIPT(ch) == NULL) return;
/* we should never be called for an NPC, but just in case... */
if (IS_NPC(ch)) return;
get_filename(GET_NAME(ch),fn,SCRIPT_VARS_FILE);
unlink(fn);
/* make sure this char has global variables to save */
if (ch->script->global_vars == NULL) return; << crashing line
vars = ch->script->global_vars;
...
In other words, you have an invalid (but non-NULL) script pointer.
I'd suggest
print *ch (with special attention on the component just
before 'script')
print *ch->script (this will probably be garbage)
The most probable[1] reason for your crashes is adding some code
that writes one byte too far - overrun. Focus on the part of the
char_data structure immidiately before scripts; If you only
overrun with one byte, the script pointer is screwed.
Welcor
[1] Since you haven't altered anything with scripts, and the code
already checks for ch->script==NULL.
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
| Newbie List: http://groups.yahoo.com/group/circle-newbies/ |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/26/03 PDT