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
> 

Reply via email to