By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,804 Members | 1,666 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,804 IT Pros & Developers. It's quick & easy.

Is pointer parameter local variable to a function?

P: n/a
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
Share this Question
Share on Google+
3 Replies


P: n/a
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

P: n/a
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

P: n/a
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.