Re: fixing memory leaks
- From: Roland Illig <roland illig gmx de>
- To: MC Devel <mc-devel gnome org>
- Subject: Re: fixing memory leaks
- Date: Wed, 18 Aug 2004 15:29:52 +0200
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]