I know that when I allocate memory dinamically I must release it using the delete operator. But when I don't use the new operator do I must release the memory pointed by a pointer? For example:
int main(){ int age = 10; int *agePtr = &age; addAge(agePtr); //do something more... //so if i do not need agePtr at all should I code the following? delete agePtr;
Denisson <denisso...@gmail.com> wrote: > I know that when I allocate memory dinamically I must release it using > the delete operator. But when I don't use the new operator do I must > release the memory pointed by a pointer?
No. Only memory that was allocated with 'new' should be released with 'delete', only memory that was allocated with 'new[]' should be relased with 'delete[]', only memory that was allocated with 'malloc', 'calloc' or 'realloc' should be released with 'free'
For example:
> int main(){ > int age = 10; > int *agePtr = &age; > addAge(agePtr); > //do something more... > //so if i do not need agePtr at all should I code the following? > delete agePtr;
No, the memory that agePtr points to was not newed, so it doesn't need to be deleted.
Denisson writes: > I know that when I allocate memory dinamically I must release it using > the delete operator. But when I don't use the new operator do I must > release the memory pointed by a pointer? For example:
> int main(){ > int age = 10; > int *agePtr = &age; > addAge(agePtr); > //do something more... > //so if i do not need agePtr at all should I code the following? > delete agePtr;
Nope.
Only stuff that you've obtained from new must be deleted. No exceptions.
I've read this explanations you've done. But I thought that would exist some tricky behaviour because that code was compiled succesful in dev cpp. I was expecting an error. Thanks
> Denisson writes: > > I know that when I allocate memory dinamically I must release it using > > the delete operator. But when I don't use the new operator do I must > > release the memory pointed by a pointer? For example:
> > int main(){ > > int age = 10; > > int *agePtr = &age; > > addAge(agePtr); > > //do something more... > > //so if i do not need agePtr at all should I code the following? > > delete agePtr;
> Nope.
> Only stuff that you've obtained from new must be deleted. No exceptions.
> objects with automatic storage duration to other functions or > to return them.
So, are you saying that is always better to use new allocation when I pass a pointer to a function or return it? And I should create pointers without new operator only if the pointer is suposed to be used in his original scope?
Could someone give a piece of code when pass addresses of objects with automatic storage duration to functions will cause some kind of problem?
Thanks
On 5 jul, 23:14, r...@zedat.fu-berlin.de (Stefan Ram) wrote:
> Denisson <denisso...@gmail.com> writes: > >int age = 10;
> The age object has automatic storage duration, so it will > exist only until control is leaving its block. No delete is > needed or should be used.
> After the end of the duration of the age object, the pointer > &age might still be stored somewhere, but it should not be use > anymore. Therefore, it is a bit risky to pass addresses of > objects with automatic storage duration to other functions or > to return them.
> But since this object was declared in the main block of the > main function, it will endure until the end of the program. > (»The function main shall not be used within a program.«)
Denisson writes: > I've read this explanations you've done. But I thought that would > exist some tricky behaviour because that code was compiled succesful > in dev cpp. I was expecting an error.
The code is valid C++ syntax and grammar.
Here's another valid C++ code that will compile just fine:
int zero() { return 0;
}
int one() { return 1;
}
int main() { one()/zero();
}
Just because code is valid C++ syntax, and compiles without an error, does not mean that it's correct.
> On 5 jul, 22:49, Sam <s...@email-scan.com> wrote: >> Denisson writes: >> > I know that when I allocate memory dinamically I must release it using >> > the delete operator. But when I don't use the new operator do I must >> > release the memory pointed by a pointer? For example:
>> > int main(){ >> > int age = 10; >> > int *agePtr = &age; >> > addAge(agePtr); >> > //do something more... >> > //so if i do not need agePtr at all should I code the following? >> > delete agePtr;
>> Nope.
>> Only stuff that you've obtained from new must be deleted. No exceptions.
On 6 Jul 2008 02:14:15 GMT, r...@zedat.fu-berlin.de (Stefan Ram) wrote in comp.lang.c++:
> But since this object was declared in the main block of the > main function, it will endure until the end of the program. > (»The function main shall not be used within a program.«)
Just a question. Is there some reason that you can't use plain old ordinary ASCII quotation marks like just about everyone else in this group? Their universally understood meaning is to delimit quoted material, after all.
Your affectation of using non-standard characters as delimiters can make things difficult on some newsreaders, and on the character sets used by some people.
Too much to ask that you use "and" instead of »and«?
On Jul 6, 4:28 am, Denisson <denisso...@gmail.com> wrote:
> You said: > > Therefore, it is a bit risky to pass addresses of > > objects with automatic storage duration to other functions or > > to return them. > So, are you saying that is always better to use new allocation > when I pass a pointer to a function or return it?
I don't think that that was what he was saying; at any rate, it seems to mix cause and effect: generally, you don't want to use pointers unless you have to: there's almost never any reason to have a pointer to an object which is cheap to copy, like int or double, and even for more expensive objects, most of the time, unless the object has identity, you should be copying it, and not dealing with pointers at all.
> And I should create pointers without new operator only if the > pointer is suposed to be used in his original scope?
In such cases, you probably shouldn't create a pointer at all.
-- James Kanze (GABI Software) email:james.ka...@gmail.com Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Jul 6, 5:56 am, Jack Klein <jackkl...@spamcop.net> wrote:
> On 6 Jul 2008 02:14:15 GMT, r...@zedat.fu-berlin.de (Stefan Ram) wrote > in comp.lang.c++: > > But since this object was declared in the main block of the > > main function, it will endure until the end of the program. > > (»The function main shall not be used within a program.«) > Just a question. Is there some reason that you can't use plain old > ordinary ASCII quotation marks like just about everyone else in this > group? Their universally understood meaning is to delimit quoted > material, after all.
It's not that universal: in French, you use « ... », and in German, »...« is common. (Of course, since this is an English language group, English conventions are to be preferred.)
> Your affectation of using non-standard characters as > delimiters can make things difficult on some newsreaders, and > on the character sets used by some people. > Too much to ask that you use "and" instead of »and«?
I've often been tempted to use the French conventions when quoting code... if the code already contains a "...". The convention is obvious enough that it should be understandable, and avoids the ambiguity of which " are part of the code, and which are being used for quoting in the English text. (Similarly, you run much less chance of an identifier clashing with a keyword if the indentifiers are in French or German:-).) Until now, I've not done it, preferring ``...'', even though that looks ugly on my screen, with my current font.
I'm not sure what the problem is with newsreaders: the standard "citation" conventions of Usenet don't use quotes. The major argument against it is, of course, the fact that there are several widely used character encodings, and it's not the same in them. But if the poster inserts the proper headers specifying the encoding, it *should* work. (Whether it does or not, is another question, and it's certain that sticking to plain ASCII is a lot surer, at least in English language groups.)
-- James Kanze (GABI Software) email:james.ka...@gmail.com Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
#include <iostream> #include <ostream> int *zeta; void epsilon( int * eta ){ zeta = eta; } void gamma(){ int delta = 22; epsilon( &delta ); } int main(){ gamma(); ::std::cout << *zeta << '\n'; }
I think I understood now. In this piece of code zeta holds the address of the delta variable that goes out of scope in the end of gamma function. So when you call cout maybe the '22' will still there, or this memory could be rewritten by another program.
Thanks
On Jul 6, 6:54 am, James Kanze <james.ka...@gmail.com> wrote:
> On Jul 6, 5:56 am, Jack Klein <jackkl...@spamcop.net> wrote:
> > On 6 Jul 2008 02:14:15 GMT, r...@zedat.fu-berlin.de (Stefan Ram) wrote > > in comp.lang.c++: > > > But since this object was declared in the main block of the > > > main function, it will endure until the end of the program. > > > (»The function main shall not be used within a program.«) > > Just a question. Is there some reason that you can't use plain old > > ordinary ASCII quotation marks like just about everyone else in this > > group? Their universally understood meaning is to delimit quoted > > material, after all.
> It's not that universal: in French, you use « ... », and in > German, »...« is common. (Of course, since this is an English > language group, English conventions are to be preferred.)
> > Your affectation of using non-standard characters as > > delimiters can make things difficult on some newsreaders, and > > on the character sets used by some people. > > Too much to ask that you use "and" instead of »and«?
> I've often been tempted to use the French conventions when > quoting code... if the code already contains a "...". The > convention is obvious enough that it should be understandable, > and avoids the ambiguity of which " are part of the code, and > which are being used for quoting in the English text. > (Similarly, you run much less chance of an identifier clashing > with a keyword if the indentifiers are in French or German:-).) > Until now, I've not done it, preferring ``...'', even though > that looks ugly on my screen, with my current font.
> I'm not sure what the problem is with newsreaders: the standard > "citation" conventions of Usenet don't use quotes. The major > argument against it is, of course, the fact that there are > several widely used character encodings, and it's not the same > in them. But if the poster inserts the proper headers > specifying the encoding, it *should* work. (Whether it does or > not, is another question, and it's certain that sticking to > plain ASCII is a lot surer, at least in English language > groups.)
> -- > James Kanze (GABI Software) email:james.ka...@gmail.com > Conseils en informatique orientée objet/ > Beratung in objektorientierter Datenverarbeitung > 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34