PDA

View Full Version : Kochan Book Example Help - memory Leakage

Barbariska
Apr 5, 2008, 06:47 PM
I am learning ObjC using very well written book by Mr. Kochan. There is an example 7.7 in the book that sums fractions. The code is listed below.

There is a Free statement for Objects aFraction and sum, but there is no free for sum2 and I can't understand it how it is being freed. Why not for sum2? Where it is being freed? Please help! Also the remark in the book is that "The result from add: method is assigned to sum2 and not to sum to avoid memory leakage". Please can somebody explain step by step on this example the life cycle of objects sum and sum2. THANKS!!!!

Method:

-(Fraction *) add: (Fraction *) f
{
Fraction *result = [[Fraction alloc] init];
int recultNum, resultDenom;
resultNum = (numerator * [f denominator]) + (denominator * [f numerator]);
resultDenom = denominator * [f denominator];

[result setTo: resultNum over: resultDenom];
[result reduce];
return result;
}

Here is main.m where the method is used:

#import "Fraction.h"

int main (int argc, char *argv[])
{
Fraction *aFraction = [[Fraction alloc] init];
Fraction *sum = [[Fraction alloc] init], *sum2;

int i, n, pow2;

[sum setTo: 0 over: 1];

scanf ("%i", &n);
pow2 = 2;
for (i = 1; i <= n, ++1)
{
[aFraction setTo: 1 over: pow2];
[sum free];
sum = sum2;
pow2 * = 2;
}

printf (After %i iterations, the sum is %g/n", n, [sum converToNum]);

[aFraction free];
[sum free];

retun 0;

}

phjo
Apr 5, 2008, 11:44 PM
What the line sum = sum2 does is just a copy of the reference sum2 (it is just that, a pointer to a Fraction object) to sum. So by freeing sum afterwards, you ARE freeing the memory the object referenced by sum2 occupied...

Now if you did :