There's your problem. You are allocating memory, with str_dup when you return, and not freeing it.
char *newstring; map = printmap(ch, ch->in_room, 2); newstring = insert_string(string_buf,map); send_to_char(newstring,ch); <-- Here free_string(newstring); return; Something like that should do it > -----Original Message----- > From: Vertigo [mailto:[EMAIL PROTECTED] > Sent: Saturday, September 28, 2002 10:25 PM > To: [email protected] > Subject: RE: Leaking function... Second opinion? > > > Here's where the function is called: > ---> SNIP > > map = printmap(ch, ch->in_room, 2); > > send_to_char(insert_string(string_buf,map),ch); <-- Here > > return; > } > > > @>-----Original Message----- > @>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf > @>Of Jason Gauthier > @>Sent: Saturday, September 28, 2002 10:04 PM > @>To: 'Vertigo' > @>Cc: '[email protected]' > @>Subject: RE: Leaking function... Second opinion? > @> > @> > @>Are you freeing the string that this function returns? > @> > @>> -----Original Message----- > @>> From: Vertigo [mailto:[EMAIL PROTECTED] > @>> Sent: Saturday, September 28, 2002 9:54 PM > @>> To: [email protected] > @>> Subject: Leaking function... Second opinion? > @>> > @>> > @>> I've been looking at a piece of code for a couple of days > now @>> that appears to be > @>> leaking memory. I'd just like another opinion it to see what > @>> it is I'm not > @>> seeing. It's tied into my do_look routine and splices two > @>> strings together > @>> using getline OLC 1.81's standard getline and other standard > @>> functions. I'm just thinking something isn't being freed > @>> correctly. What is happening is I'm getting an increase in > @>> perms by two every single time the character > @>> 'looks'. Which is equivalent to the amount of strings I'm > @>> sending to this piece of code. The other two strings display > @>> fine with no leak on their own so I've pretty much deduced > @>> that this one is the culprit. > @>> > @>> Vert > @>> > @>> > @>> Attached below: > @>> [Snip] > @>> > @>> char *insert_string( const char *oldstring, char *insert ) @>> { > @>> char formatted[MSL]; > @>> char *tempstr, *therest; > @>> char templine[MSL], newstr[MSL]; > @>> char temp1[MSL], temp2[MSL]; > @>> bool mapbigger = TRUE; > @>> bool cap = FALSE; > @>> int line= 0, i=0; > @>> > @>> tempstr = str_dup(oldstring); > @>> > @>> tempstr = format_string2( tempstr, 72, FALSE ); > @>> /* format it to minus the map */ > @>> > @>> newstr[0] = '\0'; > @>> > @>> while( *insert || *tempstr ) > @>> { > @>> if( *tempstr && !(*insert) ) > @>> mapbigger = FALSE; > @>> > @>> insert = getline(insert, temp1); /*gets first line of map */ > @>> > @>> tempstr = getline(tempstr, temp2); /*get first line > of desc*/ > @>> > @>> sprintf(templine, "%s %s{x\n\r", temp1, temp2); > @>> > @>> strcat(newstr, templine); > @>> } > @>> > @>> if(!mapbigger) > @>> { > @>> for(tempstr = newstr;;) > @>> { > @>> formatted[i++] = *tempstr; > @>> if(*(tempstr++) == '\r') > @>> { > @>> if(++line > 6) > @>> break; > @>> } > @>> } > @>> > @>> formatted[i] = '\0'; > @>> > @>> if(is_end_punct(formatted[i-3])) > @>> cap = TRUE; > @>> > @>> therest = str_dup(tempstr); > @>> > @>> therest = format_string2(therest, 79, FALSE ); > @>> > @>> if(!cap) > @>> *therest = LOWER(*therest); > @>> > @>> strcat(formatted,therest); > @>> > @>> free_string(tempstr); > @>> free_string(therest); > @>> free_string(templine); > @>> free_string(temp1); > @>> free_string(temp2); > @>> > @>> return str_dup(formatted); > @>> free_string(formatted); > @>> } > @>> else > @>> return str_dup(newstr); > @>> free_string(newstr); > @>> } > @>> > @>> > @>> -- > @>> ROM mailing list > @>> [email protected] > @>> http://www.rom.org/cgi-bin/mailman/listinfo/rom > @>> > @> > @>-- > @>ROM mailing list > @>[email protected] > @>http://www.rom.org/cgi-bin/mailman/listinfo/rom > @> > > > -- > ROM mailing list > [email protected] > http://www.rom.org/cgi-bin/mailman/listinfo/rom >

