Basically a friend of mine (Phoenix Dracul) came across this problem. Since the fellow data is now freed up properly there are a few new problems because of the way the old introduction system handled a few of its pointers. What's happening is that it sets fellow->victim like so:
fellow->vicitm = victim->name;
This makes fellow->victim point to the same piece of memory as victim->name and if the character that has remembered the name logs out it frees that space up, corrupting the player names. Neeless to say, this is a critical bug that can cause a lot of problems.
The fix:
in: act_info.c, function: do_remember find--
CREATE( nfellow, FELLOW_DATA, 1 );
nfellow->victim = victim->name;
nfellow->knownas = STRALLOC( argument );
LINK( nfellow, ch->first_fellow, ch->last_fellow, next, prev );
and change to:
CREATE( nfellow, FELLOW_DATA, 1 );
nfellow->victim = STRALLOC(victim->name);
nfellow->knownas = STRALLOC( argument );
LINK( nfellow, ch->first_fellow, ch->last_fellow, next, prev );
in do_describe find:
CREATE( nfellow, FELLOW_DATA, 1 );
nfellow->victim = fellow->victim;
nfellow->knownas = fellow->knownas;
LINK( nfellow, victim->first_fellow, victim->last_fellow, next, prev );
and change to:
CREATE( nfellow, FELLOW_DATA, 1 );
nfellow->victim = STRALLOC(fellow->victim);
nfellow->knownas = STRALLOC( fellow->knownas );
LINK( nfellow, victim->first_fellow, victim->last_fellow, next, prev );
in do_introduce find:
CREATE( fellow, FELLOW_DATA, 1 );
fellow->victim = ch->name;
fellow->knownas = STRALLOC( argument );
LINK( fellow, victim->first_fellow, victim->last_fellow, next, prev );
and change to:
CREATE( fellow, FELLOW_DATA, 1 );
fellow->victim = STRALLOC(ch->name);
fellow->knownas = STRALLOC( argument );
LINK( fellow, victim->first_fellow, victim->last_fellow, next, prev );
This way each character has thier own memory allocated pointers, which are properly freed when the character quits.
Happy Coding,
KeB