Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Is pointer parameter local variable to a function?

Reply
Thread Tools

Is pointer parameter local variable to a function?

 
 
ali
Guest
Posts: n/a
 
      03-07-2007
Hi,

When I pass a pointer as an argument of a method, is it safe if I
change the data pointed by the argument and return it upon
completion ?

For example:

Object* someFunction(Object* ob)
{
//do some manipulation and return
return ob;
}

Are there things I need to be aware/cautious when doing this? I tried
with int pointer and got the results as expected (no error or garbage
output). I had thought it would give me garbage result because to my
undestanding, ob would be a local variable to someFunction, and should
have been destroyed upon return?

I know that if within the body of the function above, I created a
pointer and assigned memory with new operator, I should not return the
pointer because it will be destroyed upon exit and I might be getting
garbage.

I know i'm missing some simple concept. Will appreciate your help.

Thanks,

Ali

 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      03-07-2007
ali wrote:
> When I pass a pointer as an argument of a method, is it safe if I
> change the data pointed by the argument and return it upon
> completion ?


Sure. You're receiving a value, you're using the value [to change
the data], you're returning the [same, supposedly] value. What's
the problem?

> For example:
>
> Object* someFunction(Object* ob)
> {
> //do some manipulation and return
> return ob;
> }
>
> Are there things I need to be aware/cautious when doing this?


The pointer passed in could be NULL. Make sure you check before you
try to manipulate the data pointed to by the pointer.

> I tried
> with int pointer and got the results as expected (no error or garbage
> output). I had thought it would give me garbage result because to my
> undestanding, ob would be a local variable to someFunction, and should
> have been destroyed upon return?


The variable will be destroyed, but the value you're returning isn't.
What happens if you do

int foo(int a)
{
int b = a + 42;
// do something to b
return a;
}

Nothing special, right. You get the value, you use the value, and then
you return the value. 'a' variable does get destroyed, but not before
the temporary of type 'int' is created and returned.

> I know that if within the body of the function above, I created a
> pointer and assigned memory with new operator, I should not return the
> pointer because it will be destroyed upon exit and I might be getting
> garbage.


Sounds wrong.

> I know i'm missing some simple concept. Will appreciate your help.


It's hard to explain if you can't grasp the [simple] concept of
passing around values. If you can separate two concepts in your
mind: of variables and values. Variables do have values, but you
don't need a variable to have a value you can pass around. That's
what an 'r-value' is.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


 
Reply With Quote
 
 
 
 
Kai-Uwe Bux
Guest
Posts: n/a
 
      03-07-2007
ali wrote:

> Hi,
>
> When I pass a pointer as an argument of a method, is it safe if I
> change the data pointed by the argument and return it upon
> completion ?
>
> For example:
>
> Object* someFunction(Object* ob)
> {
> //do some manipulation and return
> return ob;
> }
>
> Are there things I need to be aware/cautious when doing this? I tried
> with int pointer and got the results as expected (no error or garbage
> output). I had thought it would give me garbage result because to my
> undestanding, ob would be a local variable to someFunction, and should
> have been destroyed upon return?


You need to distinguish the pointer and the pointee. Both are objects:

The pointer ob is an object of type Object*. It is local to someFunction.
The pointee *ob is an object of type Object. It is not local.

The pointer ob is destroyed when it does out of scope. That, however, has no
effect on the pointee. It lives on and needs to be disposed off at some
later time.


> I know that if within the body of the function above, I created a
> pointer and assigned memory with new operator, I should not return the
> pointer because it will be destroyed upon exit and I might be getting
> garbage.


You don't know that because you can only know true statements. You might
believe so; but you would be wrong: It is safe, to return a pointer from a
function that has been allocated within the body of the function. There are
even cases where it can be considered good design.


Best

Kai-Uwe Bux
 
Reply With Quote
 
ali
Guest
Posts: n/a
 
      03-07-2007
On Mar 6, 10:13 pm, "ali" <(E-Mail Removed)> wrote:
> Hi,
>
> When I pass a pointer as an argument of a method, is it safe if I
> change the data pointed by the argument and return it upon
> completion ?
>
> For example:
>
> Object* someFunction(Object* ob)
> {
> //do some manipulation and return
> return ob;
>
> }
>
> Are there things I need to be aware/cautious when doing this? I tried
> with int pointer and got the results as expected (no error or garbage
> output). I had thought it would give me garbage result because to my
> undestanding, ob would be a local variable to someFunction, and should
> have been destroyed upon return?
>
> I know that if within the body of the function above, I created a
> pointer and assigned memory with new operator, I should not return the
> pointer because it will be destroyed upon exit and I might be getting
> garbage.
>
> I know i'm missing some simple concept. Will appreciate your help.
>
> Thanks,
>
> Ali


Ooh, now I get the idea .. thanks for all your help!

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[newbie] return local variable (or pointer to object) from function Mark C Programming 7 02-04-2011 04:59 PM
assigning a pointer the address of local variable Sourav C Programming 25 08-27-2006 05:22 AM
Pointer-to-pointer-to-pointer question masood.iqbal@lycos.com C Programming 10 02-04-2005 02:57 AM
Simple question: pointer to a local variable? NS Develop C++ 7 11-23-2003 10:29 PM
a static local variable in a static method is thread local storage? Patrick Hoffmann C++ 3 08-08-2003 02:37 PM



Advertisments