diff --git a/src/mkobj.c b/src/mkobj.c index 658b5ed5f..321ea7212 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -1943,6 +1943,10 @@ struct obj *obj; { if (obj->where != OBJ_FREE) panic("dealloc_obj: obj not free"); + if (obj->nobj) + panic("dealloc_obj with nobj"); + if (obj->cobj) + panic("dealloc_obj with cobj"); /* free up any timers attached to the object */ if (obj->timed) diff --git a/src/mon.c b/src/mon.c index 4e5be3f96..3a75573a7 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1426,6 +1426,7 @@ dmonsfree() freetmp = *mtmp; if (freetmp->mhp <= 0 && !freetmp->isgd) { *mtmp = freetmp->nmon; + freetmp->nmon = NULL; dealloc_monst(freetmp); count++; } else @@ -1603,6 +1604,8 @@ void dealloc_monst(mon) struct monst *mon; { + if (mon->nmon) + panic("dealloc_monst with nmon"); if (mon->mextra) dealloc_mextra(mon->mextra); free((genericptr_t) mon); diff --git a/src/save.c b/src/save.c index 8ab8225de..e1c737dec 100644 --- a/src/save.c +++ b/src/save.c @@ -1051,6 +1051,8 @@ register struct obj *otmp; context.spbook.book = (struct obj *) 0; } otmp->where = OBJ_FREE; /* set to free so dealloc will work */ + otmp->nobj = NULL; /* nobj saved into otmp2 */ + otmp->cobj = NULL; /* contents handled above */ otmp->timed = 0; /* not timed any more */ otmp->lamplit = 0; /* caller handled lights */ dealloc_obj(otmp); @@ -1149,6 +1151,7 @@ register struct monst *mtmp; context.polearm.m_id = mtmp->m_id; context.polearm.hitmon = NULL; } + mtmp->nmon = NULL; /* nmon saved into mtmp2 */ dealloc_monst(mtmp); } mtmp = mtmp2;