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
@>


Reply via email to