fixing memory leaks

Roland Illig roland.illig at gmx.de
Wed Aug 18 13:29:52 UTC 2004


Leonard den Ottolander wrote:
> Hi Roland,
> 
> On Mon, 2004-08-16 at 12:28, Roland Illig wrote:
> 
>>I'm currently trying to find and fix some memory leaks. That's rather 
>>difficult because there are many function taking a "char *" argument 
>>when a "const char *" would have sufficed. Additionally, it is not 
>>always clear where the memory should be freed.
> 
> 
>>declaration example:
>>/*new*/ char *g_strdup(/*in*/ const char *);
>>
>>function call example:
>>char *s = /*new*/ g_strdup("foo");
> 
> 
> Although I appreciate the effort towards code cleanup I am not sure if
> it's a good idea to commit such comments to CVS. Partially because the
> code might look very cluttered (maybe I am overestimating this), and
> more importantly the fact that it might heavily interfere with existing
> but uncommitted patches.
> 
> How much of the freeing and mallocing is done spanning multiple source
> files? This kind of auditing could be done using local copies with the
> comments added. Just keep a list of what has been audited.
> 
> If you want to do this in CVS maybe it's a good idea to wait until
> bugzilla has been cleaned up a bit more before introducing such comments
> into the code. By the way, do you want to add those temporarily or
> permanently?

They should be only temporary. As I wrote in the second part of my mail, 
after having documented the whole source, the most common usages should 
have no extra comments. In most times, a const char * means the same as 
a possible /*in*/ char *, and so the /*in*/ can be replaced by the 
language keyword const.

The other case is passing a char **. I currently do not know what is 
more frequent: an /*inout*/ parameter or a simple /*out*/ parameter. I 
guess it's the /*out*/ parameter, so we could agree that a missing 
comment means "can be uninitialized and will receive a value".

Perhaps we can also replace the /*free*/ comment by function names that 
contain the word "free". Same goes for the /*new*/ comment.

So the only comment that would appear after these substitutions would be 
either /*out*/ or /*inout*/. And that's not too much, I think.

Roland



More information about the mc-devel mailing list