Is pointer parameter local variable to a function?

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
 
V

Victor Bazarov

ali said:
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
 
K

Kai-Uwe Bux

ali said:
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
 
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

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

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,046
Latest member
Gavizuho

Latest Threads

Top