El Viernes, 9 de Enero de 2009, Daniel-Constantin Mierla escribió:
> Hello,
>
> no, it won't work. you have to allocate a pointer where to store the
> pointer.

Thanks a lot. Please let me some questions inline:


> char **address;
> char *string;
>
> static int mod_init(void)
> {
>       address = shm_malloc(sizeof(char*));
>       string = shm_malloc(sizeof(char) * 100);
>       *address = string;
>       // Store some value in 'string'.
> }
>
> static struct mi_root* mi_function(struct mi_root* cmd_tree, void* param) {
>       string = *address;
          ^------------ why is this needed? 'string' already was '*address'.

>       shm_free(string);
>       string = shm_malloc(sizeof(char) * 200);
>       *address = string;
>       // Store some new value in 'string'.
> }


If I'm not wrong, the memory after mod_init() and the memory after 
mi_function() would be something as:


Memory after mod_init():
----------------------------------------------------------
1000 | pointer 'address' | "4000"


4000 | pointer 'string'  | "hello world"
...  | 
4099 |


----------------------------------------------------------



Memory after mi_function():
----------------------------------------------------------
1000 | pointer 'address' | "7000"





7000 | pointer 'string' | "hello again, now I'm longer!"
...  |
...  |
...  |
...  |
7199 |

----------------------------------------------------------



This means that when a process wants to read 'string' value (*string) they 
must access it via *address value (**address), is it?


Thanks a lot.


-- 
Iñaki Baz Castillo

_______________________________________________
Kamailio (OpenSER) - Devel mailing list
[email protected]
http://lists.kamailio.org/cgi-bin/mailman/listinfo/devel

Reply via email to