468,771 Members | 1,496 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,771 developers. It's quick & easy.

Is pointer parameter local variable to a function?

ali
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

Mar 7 '07 #1
3 2444
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
Mar 7 '07 #2
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
Mar 7 '07 #3
ali
On Mar 6, 10:13 pm, "ali" <aliasger.jaf...@gmail.comwrote:
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!

Mar 7 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by John N. | last post: by
34 posts views Thread by wilson | last post: by
7 posts views Thread by Marcelo | last post: by
7 posts views Thread by lovecreatesbea... | last post: by
16 posts views Thread by gaga | last post: by
6 posts views Thread by raghu | last post: by
34 posts views Thread by Davy | last post: by
reply views Thread by zhoujie | last post: by
1 post views Thread by Marin | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.