Thanks, Jason, that fixed one of the 2 leaks.  I'll keep searching and
gdb'ing until I whack it.  I haven't every really had any problems with
memory -- could be because I'm just tired and missing something lame.

If anyone else has input, let me know.

Thanks again,
Vert

@>-----Original Message-----
@>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf 
@>Of Jason Gauthier
@>Sent: Saturday, September 28, 2002 11:22 PM
@>To: 'Vertigo'; '[email protected]'
@>Subject: RE: Leaking function... Second opinion?
@>
@>
@>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
@>> 
@>
@>-- 
@>ROM mailing list
@>[email protected]
@>http://www.rom.org/cgi-bin/mailman/listinfo/rom
@>


Reply via email to