Pointers and Delete Operator

Discussion in 'C++' started by Denisson, Jul 6, 2008.

  1. Denisson

    Denisson Guest

    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;

    //do something more...


    }

    Thanks
     
    Denisson, Jul 6, 2008
    #1
    1. Advertising

  2. Denisson

    Denisson Guest

    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

    On 5 jul, 22:49, Sam <> 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.
    >
    >  application_pgp-signature_part
    > 1KDownload
     
    Denisson, Jul 6, 2008
    #2
    1. Advertising

  3. Denisson

    Stefan Ram Guest

    Denisson <> 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.«)
     
    Stefan Ram, Jul 6, 2008
    #3
  4. Denisson

    Denisson Guest

    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? 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, -berlin.de (Stefan Ram) wrote:
    > Denisson <> 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, Jul 6, 2008
    #4
  5. Denisson

    Stefan Ram Guest

    Denisson <> writes:
    >So, are you saying that is always better to use new allocation
    >when I pass a pointer to a function or return it?


    »new« is used when you want explicit control of storage
    duration.

    >And I should create pointers without new operator only if the
    >pointer is suposed to be used in his original scope?


    An /identifier/ has scope, a pointer does not have 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?


    Whether undefined behavior is deemed to be a problem, depends
    on personal expectations and decisions which are not the
    subject of this newsgroup.

    The following programs are not guaranteed to print »22«, but
    might still do so.

    #include <iostream>
    #include <ostream>
    int *alpha(){ int beta = 22; return &beta; }
    int main(){ int *gamma = alpha(); ::std::cout << *gamma << '\n'; }

    #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'; }

    If they should print »22«, this only shows that

    »The fact that the program works has no relevance.«

    http://www.relisoft.com/book/tech/intro.html
     
    Stefan Ram, Jul 6, 2008
    #5
  6. Denisson

    James Kanze Guest

    On Jul 6, 4:28 am, Denisson <> 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:
    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
     
    James Kanze, Jul 6, 2008
    #6
  7. Denisson

    James Kanze Guest

    On Jul 6, 5:56 am, Jack Klein <> wrote:
    > On 6 Jul 2008 02:14:15 GMT, -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:
    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
     
    James Kanze, Jul 6, 2008
    #7
  8. Denisson

    Denisson Guest

    #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 <> wrote:
    > On Jul 6, 5:56 am, Jack Klein <> wrote:
    >
    > > On 6 Jul 2008 02:14:15 GMT, -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:
    > 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
     
    Denisson, Jul 6, 2008
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Xamalek
    Replies:
    7
    Views:
    697
  2. Jef Driesen
    Replies:
    1
    Views:
    514
    Gernot Frisch
    Jan 19, 2005
  3. Amy
    Replies:
    13
    Views:
    6,040
    Kurt Stutsman
    Feb 23, 2005
  4. tom
    Replies:
    5
    Views:
    418
  5. cerr

    pointers, pointers, pointers...

    cerr, Apr 7, 2011, in forum: C Programming
    Replies:
    12
    Views:
    695
Loading...

Share This Page