pass a pointer-to-pointer, or return a pointer?


 
Thread Tools Search this Thread
Top Forums Programming pass a pointer-to-pointer, or return a pointer?
# 8  
Old 01-06-2009
Quote:
Originally Posted by shamrock
For an embedded system where resources are scarce you are better off mallocing that block of memory in main.
I think it's just an example. An embedded system often has no OS at all, very few libraries, and do-it-yourself memory management.

Last edited by Corona688; 01-06-2009 at 05:10 PM..
# 9  
Old 01-07-2009
Thanks to you all for your comments!
So it is believed that:
(1) there is no actual functional difference between the two methods;
(2) it is needed to pass a pointer-to-pointer to a function only if the original value of the "pointer-to-pointer" parameter is used in the function, or we want to change its value in this function. Otherwise, it only increases the function invoking overhead.
(3) it should be careful when return a local pointer value in a function, because a pointer pointing to stack space(local variables) returned to the invoker points to an invalid space. The pointer returned from a subroutine should point to heap space(like malloc()) or global&static variables.

Is that right ?
# 10  
Old 01-07-2009
Quote:
Originally Posted by aaronwong
Thanks to you all for your comments!
So it is believed that:
(1) there is no actual functional difference between the two methods;
Not as you've written them, no.
Quote:
(2) it is needed to pass a pointer-to-pointer to a function only if the original value of the "pointer-to-pointer" parameter is used in the function, or we want to change its value in this function. Otherwise, it only increases the function invoking overhead.
I think that's correct, though pointers always make for awkward language.
Quote:
(3) it should be careful when return a local pointer value in a function, because a pointer pointing to stack space(local variables) returned to the invoker points to an invalid space. The pointer returned from a subroutine should point to heap space(like malloc()) or global&static variables.
Quite right, stack variables are only valid until the function returns. You can give stack pointers to functions you're calling however, just like you did inside the main() of your first example, since that function is guaranteed to return before main() does.
# 11  
Old 01-07-2009
Quote:
Originally Posted by Corona688
I think it's just an example. An embedded system often has no OS at all, very few libraries, and do-it-yourself memory management.
That was true a couple of decades ago. Nowadays most embedded systems mobile phones for ex. have an OS, virtual memory mgmt and all the libraries. Although the op may be using one that is bare bones but I doubt that otherwise he would not be using malloc and would most likely be coding in assembly language instead of in C.
# 12  
Old 01-08-2009
Quote:
Originally Posted by shamrock
That was true a couple of decades ago. Nowadays most embedded systems mobile phones for ex. have an OS, virtual memory mgmt and all the libraries. Although the op may be using one that is bare bones but I doubt that otherwise he would not be using malloc and would most likely be coding in assembly language instead of in C.
Small microprocessors are more popular than ever, just not for powering all-singing all-dancing java smartphones. They're in things like MP3 players, wireless mice, cordless phones, monitors, thousands of different USB devices, microwaves, cars... you get the idea. And yes, they are very barebones, and yes, C is very popular for programming them for the most part. There's been a huge explosion of different architectures, developers are fortunate to not have to learn the assembler for them all.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Segmentation fault when I pass a char pointer to a function in C.

I am passing a char* to the function "reverse" and when I execute it with gdb I get: Program received signal SIGSEGV, Segmentation fault. 0x000000000040083b in reverse (s=0x400b2b "hello") at pointersExample.c:72 72 *q = *p; Attached is the source code. I do not understand why... (9 Replies)
Discussion started by: jose_spain
9 Replies

2. Programming

Pointer for 2D array seems to be 3D in C

I am struggling with the pointer to 2D-array (cf: 2D array of pointers). Can anybody help me elaborate how the pointer x moves in the memory to access the individual of y, especially the high lighted lines? I have talked to one of the curators of the forum, but I am still not quite clear. Here... (1 Reply)
Discussion started by: yifangt
1 Replies

3. Programming

Pointer to pointers

Hi guys, I'm trying to understand pointers in C and made a simple example and I've problems with It. Can someone help? #include <stdio.h> #include <stdlib.h> #include <assert.h> int f1(char **str_); int main(int argc, char **argv) { char *str = NULL; f1(&str); ... (3 Replies)
Discussion started by: pharaoh
3 Replies

4. Programming

Pointer Arithmetic In C

I have a fundamental question on C pointer arithmetry.. Suppose i have a c string pointer already pointing to a valid location, Can I just do a charptr = charptr +1; to get to the next location, irregardless if my program is 32 or 64 bits? or should i do it this way: charptr =... (1 Reply)
Discussion started by: Leion
1 Replies

5. Programming

matrix pointer

Can anyone tell me what the following statements do? float (*tab); tab=(float (*)) calloc(MAXCLASS, (MAXCLASS+1)*sizeof(float)); (3 Replies)
Discussion started by: littleboyblu
3 Replies

6. Programming

How to return void function pointer

Hello all im trying to build function that will return void function pointer what is mean is ( not working ) the main function void * myClass::getFunction(int type){ if(type==1) return &myClass::Test1; if(type==2) return &myClass::Test2; } void myClass::Test1(){... (1 Reply)
Discussion started by: umen
1 Replies

7. Programming

far pointer

what is far pointer in C (1 Reply)
Discussion started by: useless79
1 Replies

8. Programming

pointer problem

could any one tell why the following is showing segmentation fault while using **ptr but working fine using **a #include<stdio.h> ... (1 Reply)
Discussion started by: useless79
1 Replies

9. Programming

Regarding char Pointer

Hi, char *s="yamaha"; cout<<s<<endl; int *p; int i=10; p=&i; cout<<p<<endl; 1) For the 1st "cout" we will get "yamaha" as output. That is we are getting "content of the address" for cout<<s. 2) But for integer "cout<<p" we are getting the "address only". Please clarify how we are... (2 Replies)
Discussion started by: sweta
2 Replies

10. Programming

pointer

void main() { int a={1,2,3,4,5,6,7,8,9,10}; int *p=a; int *q=&a; cout<<q-p+1<<endl; } The output is 10, how? if we give cout<<q it will print the address, value won't print.... if we give cout<<p it will print the address, value won't print.... p has the base addr; q... (1 Reply)
Discussion started by: sarwan
1 Replies
Login or Register to Ask a Question