14 Dec, 2006, gazzy123 wrote in the 1st comment:
Votes: 0
#0 alloc_mem (sMem=4) at db.c:3103
3103 rgFreeList[iList] = * ((void **) rgFreeList[iList]);
(gdb) print iList
$1 = 0
(gdb) print rgFreeList
$2 = {0x6e797b73, 0x0, 0x4041512c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x40415964, 0x0}
(gdb) print rgFreeList[iList]
$3 = (void *) 0x6e797b73

db.c the function.
void *alloc_mem( int sMem )
{
void *pMem;
int *magic;
int iList;

sMem += sizeof(*magic);

for ( iList = 0; iList < MAX_MEM_LIST; iList++ )
{
if ( sMem <= rgSizeList[iList] )
break;
}

if ( iList == MAX_MEM_LIST )
{
bug( "Alloc_mem: size %d too large.", sMem );
exit( 1 );
}

if ( rgFreeList[iList] == NULL )
{
pMem = alloc_perm( rgSizeList[iList] );
}
else
{
pMem = rgFreeList[iList];
rgFreeList[iList] = * ((void **) rgFreeList[iList]);
}

magic = (int *) pMem;
*magic = MAGIC_NUM;
pMem += sizeof(*magic);

memory_chunks = sMem; /****** memcheck ******/
return pMem;
}


I dont know whats wrong :/
14 Dec, 2006, Aidan wrote in the 2nd comment:
Votes: 0
Might you be able to backtrace the core file?
The error may have occurred before that point.
14 Dec, 2006, cbunting wrote in the 3rd comment:
Votes: 0
Hello,
Instead of making modifications to void *alloc_mem… Why not just install shared string manager or smm?

Also, why would you need to allocate memory for any magic system or spells?

Chris
14 Dec, 2006, gazzy123 wrote in the 4th comment:
Votes: 0
(gdb) bt
#0 alloc_mem (sMem=4) at db.c:3103
#1 0x0804cc44 in show_list_to_char (list=0x0, ch=0x40413c58, fShort=1 '\001',
fShowNothing=1 '\001') at act_info.c:165
#2 0x0804e9a1 in do_look (ch=0x40413c58, argument=0x404150eb "corpse")
at act_info.c:1286
#3 0x08082809 in do_function (ch=0x80d1900, do_fun=0x804e57c <do_look>,
argument=0x80d1900 "\004") at interp.c:892
#4 0x080759b8 in damage (ch=0x40413c58, victim=0x4039a008, dam=1078041188,
dt=1000, dam_type=135076096, show=1 '\001') at fight.c:1141
#5 0x08074be0 in one_hit (ch=0x40413c58, victim=0x4039a008, dt=1000,
secondary=96 '`') at fight.c:729
#6 0x08073ef3 in multi_hit (ch=0x40413c58, victim=0x4039a008, dt=-1)
at fight.c:277
#7 0x080794eb in do_kill (ch=0x40413c58, argument=0x80d1900 "\004")
at fight.c:3201
#8 0x0808235e in interpret (ch=0x40413c58, argument=0x40413213 "sn")
at interp.c:694
#9 0x0806614c in substitute_alias (d=0x40412df4, argument=0x40413211 "k sn")
at alias.c:95
#10 0x08068075 in game_loop_unix (control=4) at comm.c:823
#11 0x08067c09 in main (argc=2, argv=0xbffffdd4) at comm.c:449



and btw… this alloc_mem is a stock function I just added so that I can se perms.. from a snippet.
14 Dec, 2006, Omega wrote in the 5th comment:
Votes: 0
cbunting, obviously you haven't worked with rom before, because MAGIC_NUM and magic has nothing todo with the skill/magic system.

gazzy123, change into each frame and info locals.

so like,
frame 1
info locals

and print the results so we can see them.
14 Dec, 2006, gazzy123 wrote in the 6th comment:
Votes: 0
(gdb) frame 1
#1 0x0804cc44 in show_list_to_char (list=0x0, ch=0x40413c58, fShort=1 '\001',
fShowNothing=1 '\001') at act_info.c:165
165 prgnShow = alloc_mem( count * sizeof(int) );
(gdb) info locals
buf = "The corpse of {xa {x{yG{Gi{ga{Gnt s{yn{gai{yl{x holds:\n\r\000\000\000\000\b 9@\002\000\000\000\005\000\000\000!", '\0' <repeats 18 times>, "!\202\234\016\b@E\r\b E\r\bÌ4\r\b", '\0' <repeats 304 times>, "\2055A@ô-A@G\000\000\000¨\223ÿ¿\t\224\006\b\2055A@à\224ÿ¿G\000\000\000\f\000\000\000&C\r\bX<A@ø¦ÿ¿DÁ\006\bô-A@à\224ÿ¿G", '\0' <repeats 19 times>, "4$\017@ÿ\224ÿ¿", '\0' <repeats 12 times>, "\b"…
output = (BUFFER *) 0x404150f4
prgpstrShow = (char **) 0x40415964
prgnShow = (int *) 0x0
pstrShow = 0x0
obj = (OBJ_DATA *) 0x0
nShow = 0
iShow = 0
count = 0
fCombine = 0 '\0'

(gdb) frame 2
#2 0x0804e9a1 in do_look (ch=0x40413c58, argument=0x404150eb "corpse")
at act_info.c:1286
1286 show_list_to_char( obj->contains, ch, TRUE, TRUE );
(gdb) info locals
buf = "The corpse of {xa {x{yG{Gi{ga{Gnt s{yn{gai{yl{x is lying here.\000here.\0 00!!!{Y ", '=' <repeats 13 times>, "{x\000 D E A D !!!{Y ", '=' <repeats 13 time s>, "{x\n\r\0004$\017@<{\000@ÔP\t@@_\033@\f¨ÿ¿è§ÿ¿\2009\017@\f¨ÿ¿\020»ÿ¿\017100\ 000\000\000\000\017Íÿ¿@_\033@@YA@x\000\000\000ø¨ÿ¿4$\017@\"ZA@\020»ÿ¿@_\033@L¨". ..
arg1 = "in\000\000\001\200­û0§ÿ¿0§ÿ¿0§ÿ¿0§ÿ¿o§ÿ¿ÿÿÿÿ0§ÿ¿ÿÿÿÿ", '\0' <repeats 56 times>, "ÿÿÿÿ\000\000\000\000Dþ\n@\004ã\032@\200ã\032@@_\033@\004\000\000\000\00 3\000\000\000Ȧÿ¿0§ÿ¿Ø¦ÿ¿&\027\a\b\200\000\000\000\004\000\000\000àð\032@\000\00 0\000\0000§ÿ¿0§ÿ¿ø¦ÿ¿ï\030\a\b(\233A@0§ÿ¿0§ÿ¿0§ÿ¿Ô\177\"@X<A@H¹ÿ¿÷k\a\bd\232A@lÕ 2@Ô\177\"@\000\000\000\000\000\000\000\000\005\000\000\000h¹ÿ¿\vq\a\b\f\2019@X<" …
arg2 = "corpse", '\0' <repeats 166 times>, "4$\017@\000\000\000\000\000\000\000\ 000@_\033@4¦ÿ¿\030¦ÿ¿\2009\017@4¦ÿ¿0§ÿ¿ÿÿÿÿ\000\000\000\000ÿÿÿÿ@_\033@0§ÿ¿4¦ÿ¿à¦ ÿ¿(gdb) frame 1
#1 0x0804cc44 in show_list_to_char (list=0x0, ch=0x40413c58, fShort=1 '\001',
fShowNothing=1 '\001') at act_info.c:165
165 prgnShow = alloc_mem( count * sizeof(int) );
(gdb) info locals
buf = "The corpse of {xa {x{yG{Gi{ga{Gnt s{yn{gai{yl{x holds:\n\r\000\000\000\000\b 9@\002\000\000\000\005\000\000\000!", '\0' <repeats 18 times>, "!\202\234\016\b@E\r\b E\r\bÌ4\r\b", '\0' <repeats 304 times>, "\2055A@ô-A@G\000\000\000¨\223ÿ¿\t\224\006\b\2055A@à\224ÿ¿G\000\000\000\f\000\000\000&C\r\bX<A@ø¦ÿ¿DÁ\006\bô-A@à\224ÿ¿G", '\0' <repeats 19 times>, "4$\017@ÿ\224ÿ¿", '\0' <repeats 12 times>, "\b"…
output = (BUFFER *) 0x404150f4
prgpstrShow = (char **) 0x40415964
prgnShow = (int *) 0x0
pstrShow = 0x0
obj = (OBJ_DATA *) 0x0
nShow = 0
iShow = 0
count = 0
fCombine = 0 '\0'

(gdb) frame 2
#2 0x0804e9a1 in do_look (ch=0x40413c58, argument=0x404150eb "corpse")
at act_info.c:1286
1286 show_list_to_char( obj->contains, ch, TRUE, TRUE );
(gdb) info locals
buf = "The corpse of {xa {x{yG{Gi{ga{Gnt s{yn{gai{yl{x is lying here.\000here.\0 00!!!{Y ", '=' <repeats 13 times>, "{x\000 D E A D !!!{Y ", '=' <repeats 13 time s>, "{x\n\r\0004$\017@<{\000@ÔP\t@@_\033@\f¨ÿ¿è§ÿ¿\2009\017@\f¨ÿ¿\020»ÿ¿\017100\ 000\000\000\000\017Íÿ¿@_\033@@YA@x\000\000\000ø¨ÿ¿4$\017@\"ZA@\020»ÿ¿@_\033@L¨". ..
arg1 = "in\000\000\001\200­û0§ÿ¿0§ÿ¿0§ÿ¿0§ÿ¿o§ÿ¿ÿÿÿÿ0§ÿ¿ÿÿÿÿ", '\0' <repeats 56 times>, "ÿÿÿÿ\000\000\000\000Dþ\n@\004ã\032@\200ã\032@@_\033@\004\000\000\000\00 3\000\000\000Ȧÿ¿0§ÿ¿Ø¦ÿ¿&\027\a\b\200\000\000\000\004\000\000\000àð\032@\000\00 0\000\0000§ÿ¿0§ÿ¿ø¦ÿ¿ï\030\a\b(\233A@0§ÿ¿0§ÿ¿0§ÿ¿Ô\177\"@X<A@H¹ÿ¿÷k\a\bd\232A@lÕ 2@Ô\177\"@\000\000\000\000\000\000\000\000\005\000\000\000h¹ÿ¿\vq\a\b\f\2019@X<" …
arg2 = "corpse", '\0' <repeats 166 times>, "4$\017@\000\000\000\000\000\000\000\ 000@_\033@4¦ÿ¿\030¦ÿ¿\2009\017@4¦ÿ¿0§ÿ¿ÿÿÿÿ\000\000\000\000ÿÿÿÿ@_\033@0§ÿ¿4¦ÿ¿à¦ ÿ¿[v\016@4¦ÿ¿ñ\225\036@\f§ÿ¿0§ÿ¿"
arg3 = "in", '\0' <repeats 30 times>, "Stonefist's {y>>>FUCKIN ANNIHILATES!!<<< {x {xa {x{yG{Gi{ga{Gnt s{yn{gai{yl{x !\n\r", '\0' <repeats 142 times>
pexit = (EXIT_DATA *) 0x40419a64
victim = (CHAR_DATA *) 0x80d1900
obj = (OBJ_DATA *) 0x40419a64
pdesc = 0x80d1900 "\004"
door = 135281504
number = 1
count = 0

(gdb) frame 3
#3 0x08082809 in do_function (ch=0x80d1900, do_fun=0x804e57c <do_look>,
argument=0x80d1900 "\004") at interp.c:892
892 (*do_fun) (ch, command_string);
(gdb) info locals
command_string = 0x404150e8 "in corpse"

(gdb) frame 4
#4 0x080759b8 in damage (ch=0x40413c58, victim=0x4039a008, dam=1078041188,
dt=1000, dam_type=135076096, show=1 '\001') at fight.c:1141
1141 do_function(ch, &do_look, "in corpse");
(gdb) info locals
coins = (OBJ_DATA *) 0x80d1900
corpse = (OBJ_DATA *) 0x40419a64
immune = 0 '\0'

(gdb) frame 5
#5 0x08074be0 in one_hit (ch=0x40413c58, victim=0x4039a008, dt=1000,
secondary=96 '`') at fight.c:729
729 result = damage( ch, victim, dam, dt, dam_type, TRUE );
(gdb) info locals
wield = (OBJ_DATA *) 0x40414fd4
victim_ac = 9675
thac0 = -1345
thac0_00 = 0
thac0_32 = 135281504
dam = 9675
diceroll = 31
sn = 105
skill = 120
dam_type = 1
result = 0 '\0'
(gdb)



dont think I need to add more frames… 5 should due
15 Dec, 2006, Zeno wrote in the 7th comment:
Votes: 0
Have you gotten this crash more than once?
15 Dec, 2006, Omega wrote in the 8th comment:
Votes: 0
list = 0x0

put at the top, a

if (!list)
return


that should stop the immediate crash problem. but it won't fix the real issue, and that is that you are using a stock rom mud. ;) :lol:
15 Dec, 2006, Aidan wrote in the 9th comment:
Votes: 0
Paste your void show_list_to_char function from act_info.c

Your crash is coming from there.
15 Dec, 2006, Guest wrote in the 10th comment:
Votes: 0
Actually Darien, your suggestion is probably the right way to go. In the backtrace the show_list_to_char function is trying to display the contents of a corpse after a kill. The corpse apparently has no contents, so the corpse->contains pointer is NULL. At the top of show_list_to_char, something like this would work:

if( !list )
{
if( fShowNothing )
{
send_to_char( " Nothing.\r\n", ch );
}
return;
}
15 Dec, 2006, Omega wrote in the 11th comment:
Votes: 0
i appreciate the vote of confidence samson :)

just I am right, it shouldn't crash, even without it, because the for-loops check the list, however, something
funky is going on so we have to figure out the main cause, what i propose is just a bandaid to the real problem.
16 Dec, 2006, Aidan wrote in the 12th comment:
Votes: 0
I've had this problem before and its in the show_list_to_char function. :P
He just needs to paste it in. :D
16 Dec, 2006, Tyche wrote in the 13th comment:
Votes: 0
The show_list_to_char() is okay.

There are other problems. A stack overflow much higher up the stack.

(gdb) frame 4
#4 0x080759b8 in damage (ch=0x40413c58, victim=0x4039a008, dam=1078041188,
dt=1000, dam_type=135076096, show=1 '\001') at fight.c:1141
1141 do_function(ch, &do_look, "in corpse");

Check out dam_type. That's not a legal value.

(gdb) frame 5
thac0_32 = 135281504

Neither is this.
16 Dec, 2006, cbunting wrote in the 14th comment:
Votes: 0
Hello All,
Firstly, sorry for my first reply. I haven't messed with Rom in awhile.

Did you add a rom snippet or something to fight.c? GDB is showing something that came from the one_hit function so I'm guessing that you modified exisiting code or were adding other skills. Or maybe you were playing with the damage modifiers.

One of the best things to do is to always back up your source code before adding something else. That way, if something goes wrong, you always have a fresh backup.. Otherwise, it can be a real pain.

Chris
16 Dec, 2006, gazzy123 wrote in the 15th comment:
Votes: 0
I set all int's to 0 in the beginning of one_hit and I think that worked out.. atleast I havn't gotten any crash yet.
also went through the code and I have no idea why thac0_32 is that high… casue none of the calculations does anything with it other than using thac0_32 = class_table[ch->class].thac00_32
18 Dec, 2006, Tyche wrote in the 16th comment:
Votes: 0
gazzy123 said:
thac0_32 = class_table[ch->class].thac00_32


You might try setting a break on that line or a watch on thac0_32. In the stock code there are no local char arrays; I don't know about your code. The reason I mention that is the most likely cause of a local integer suddenly aquiring ascii character values is when one writes beyond the end of a local char array.
20 Dec, 2006, gazzy123 wrote in the 17th comment:
Votes: 0
Ok, a new problem occured.

#0 game_loop_unix (control=4) at comm.c:831
831 d->incomm[0] = '\0';
(gdb) info locals
in_set = {__fds_bits = {32, 0 <repeats 31 times>}}
out_set = {__fds_bits = {32, 0 <repeats 31 times>}}
exc_set = {__fds_bits = {0 <repeats 32 times>}}
maxdesc = 10218
d = (DESCRIPTOR_DATA *) 0x1be14028
null_time = {tv_sec = 0, tv_usec = 0}
last_time = {tv_sec = 1166652582, tv_usec = 612136}
(gdb) frame 1
#1 0x08067d15 in main (argc=2, argv=0x52bfeaa4) at comm.c:449
449 game_loop_unix( control );
(gdb) info locals
now_time = {tv_sec = 1166652572, tv_usec = 403487}
fCopyOver = 0 '\0'
(gdb)

after doing "quit"
21 Dec, 2006, Omega wrote in the 18th comment:
Votes: 0
make sure that your descriptor_list's loops are looking sorta like this..

for(d = descriptor_list; d; d = d_next)
{
d_next = d->next;
…. (continue normal code here)


This is done because somewhere during your list, its closing the descriptor and still thinking that the d is still there.

Atleast thats what i believe is going on. Seen it afew times when people convert from alloc_mem to calloc/free
28 Dec, 2006, gazzy123 wrote in the 19th comment:
Votes: 0
Ok, got another problem now and I cannot figure it out.

write_to_buffer function:
void write_to_buffer( DESCRIPTOR_DATA *d, const char *txt, int length )
{
/*
* Find length in case caller didn't.
*/
if ( length <= 0 )
length = strlen(txt);

/*
* Initial \n\r if needed.
*/
if ( d->outtop == 0 && !d->fcommand )
{
d->outbuf[0] = '\n';
d->outbuf[1] = '\r';
d->outtop = 2;
}

/*
* Expand the buffer as needed.
*/
while ( d->outtop + length >= d->outsize )
{
char *outbuf;

if (d->outsize >= 32000)
{
bug("Buffer overflow. Closing.\n\r",0);
close_socket(d);
return;
}
//outbuf = alloc_mem( 2 * d->outsize );
CREATE(outbuf,char,(2 * d->outsize));

strncpy( outbuf, d->outbuf, d->outtop );
//free_mem( d->outbuf, d->outsize );
DISPOSE(d->outbuf);

d->outbuf = outbuf;
d->outsize *= 2;
}

/*
* Copy.
*/
strncpy( d->outbuf + d->outtop, txt, length );
d->outtop += length;
return;
}


error in valgrind & gdb:

==10075== Invalid free() / delete / delete[]
==10075== at 0x1B904B04: free (vg_replace_malloc.c:152)
==10075== by 0x80695B6: write_to_buffer (comm.c:1739)
==10075== by 0x806BD01: send_to_char (comm.c:2797)
==10075== by 0x805114B: do_who (act_info.c:2410)
==10075== by 0x8082AB1: interpret (interp.c:696)
==10075== by 0x8066257: substitute_alias (alias.c:95)
==10075== by 0x8068180: game_loop_unix (comm.c:824)
==10075== by 0x8067D14: main (comm.c:449)
==10075== Address 0x1BD3A990 is 21400 bytes inside a block of size 131072 alloc'd
==10075== at 0x1B904F75: calloc (vg_replace_malloc.c:175)
==10075== by 0x8071F15: alloc_perm (db.c:3183)
==10075== by 0x80AB4D4: new_char (recycle.c:334)
==10075== by 0x807051A: create_mobile (db.c:2010)
==10075== by 0x806FEB5: reset_room (db.c:1723)
==10075== by 0x80704CF: reset_area (db.c:1987)
==10075== by 0x806FC3C: area_update (db.c:1600)
==10075== by 0x806E450: boot_db (db.c:429)
==10075== by 0x8067CD3: main (comm.c:442)
==10075==


(gdb) bt
#0 0x1b904b04 in _vgi__soname$3Alibc$2Eso$2E6$3Afree (p=0x1bd3a990)
at vg_replace_malloc.c:152
#1 0x080695b7 in write_to_buffer (d=0x1bd3a348,
txt=0x52bf7210 "\033
==10075== at 0x1B904B04: free (vg_replace_malloc.c:152)
==10075== by 0x80695B6: write_to_buffer (comm.c:1739)
==10075== by 0x806BD01: send_to_char (comm.c:2797)
==10075== by 0x805114B: do_who (act_info.c:2410)
==10075== by 0x8082AB1: interpret (interp.c:696)
==10075== by 0x8066257: substitute_alias (alias.c:95)
==10075== by 0x8068180: game_loop_unix (comm.c:824)
==10075== by 0x8067D14: main (comm.c:449)
==10075== Address 0x1BD3A990 is 21400 bytes inside a block of size 131072 alloc'd
==10075== at 0x1B904F75: calloc (vg_replace_malloc.c:175)
==10075== by 0x8071F15: alloc_perm (db.c:3183)
==10075== by 0x80AB4D4: new_char (recycle.c:334)
==10075== by 0x807051A: create_mobile (db.c:2010)
==10075== by 0x806FEB5: reset_room (db.c:1723)
==10075== by 0x80704CF: reset_area (db.c:1987)
==10075== by 0x806FC3C: area_update (db.c:1600)
==10075== by 0x806E450: boot_db (db.c:429)
==10075== by 0x8067CD3: main (comm.c:442)
==10075==


(gdb) bt
#0 0x1b904b04 in _vgi__soname$3Alibc$2Eso$2E6$3Afree (p=0x1bd3a990)
at vg_replace_malloc.c:152
#1 0x080695b7 in write_to_buffer (d=0x1bd3a348,
txt=0x52bf7210 "\033[0;34m|", ' ' <repeats 72 times>, "|\n\r\033[0;34m|", ' ' <repeats 17 times>, "—\033[1;34m=\033[1;30m+\033[1;34m====\033[1;30m<\033[1; 37m+\033[1;30m> \033[1;37mDEATHBRINGER \033[1;30m<\033[1;37m+\033"…,
length=928) at comm.c:1739
#2 0x0806bd02 in send_to_char (txt=0x52bf71a0 "\002\021", ch=0x1bd3b18c)
at comm.c:2797
#3 0x0805114c in do_who (ch=0x1bd3b18c, argument=0x1bd3a768 "")
at act_info.c:2410
#4 0x08082ab2 in interpret (ch=0x1bd3b18c, argument=0x1bd3a768 "")
at interp.c:696
#5 0x08066258 in substitute_alias (d=0x1bd3a348, argument=0x1bd3a765 "who")
at alias.c:95
#6 0x08068181 in game_loop_unix (control=4) at comm.c:824
#7 0x08067d15 in main (argc=2, argv=0x52bfeaa4) at comm.c:449


(gdb) frame 1
#1 0x080695b7 in write_to_buffer (d=0x1bd3a348,
txt=0x52bf7210 "\033[0;34m|", ' ' <repeats 72 times>, "|\n\r\033[0;34m|", ' ' <repeats 17 times>, "—\033[1;34m=\033[1;30m+\033[1;34m====\033[1;30m<\033[1;37m+\033[1;30m> \033[1;37mDEATHBRINGER \033[1;30m<\033[1;37m+\033"…,
length=928) at comm.c:1739
1739 DISPOSE(d->outbuf);
(gdb) info locals
outbuf = 0x1bd68a58 "\033[0;34m(\033[1;34m@\033[0;34m)", ' ' <repeats 14 times>, "___….___", ' ' <repeats 20 times>, "___….___", ' ' <repeats 14 times>, "\033[0;34m(\033[1;34m@\033[0;34m)\n\r\033[0;34m|\\'_ __.-'' ''-.___ ___.-'' ''-.__ _'/|\n"…


(gdb) frame 2
#2 0x0806bd02 in send_to_char (txt=0x52bf71a0 "\002\021", ch=0x1bd3b18c)
at comm.c:2797
2797 write_to_buffer( ch->desc, buf, point2 - buf );
(gdb) info locals
point = 0x1bd66c96 ""
point2 = 0x52bf75b0 ""
buf = "\033[0;34m|", ' ' <repeats 72 times>, "|\n\r\033[0;34m|", ' ' <repeats 17 times>, "—\033[1;34m=\033[1;30m+\033[1;34m====\033[1;30m<\033[1;37m+\033[1;30m> \033[1;37mDEATHBRINGER \033[1;30m<\033[1;37m+\033[1;30m>\033[1;34m====\033[1;37m+\033[1;34m=\033[0;34m—\033[0;34m", ' ' <repeats 17 times>, "|\n\r\033[0;3"…
skip = 0

(gdb) frame 3
#3 0x0805114c in do_who (ch=0x1bd3b18c, argument=0x1bd3a768 "")
at act_info.c:2410
2410 send_to_char( buf->data, ch );
(gdb) info locals
buf = (BUFFER_NEW *) 0x1bd668a8
d = (DESCRIPTOR_DATA *) 0x0
wch = (CHAR_DATA *) 0x1bd3b18c
nMatch = 1
clevel = 0
found = 0 '\0'
30 Dec, 2006, Davion wrote in the 20th comment:
Votes: 0
THe focus of your problem would be

Quote
==10075== Invalid free() / delete / delete[]


What's happening here, I believe, is you are creating something with "new" then trying to delete it with "free" or creating with *alloc and trying to delete with "delete". Mixing up C allocators with C++ desturctors (or visa versa) is bad juju and should be avoided at all costs. Don't use some half assed port to C++ codebase, you'll just get problems
0.0/26