On Tue, Aug 15, 2006 at 12:57:06AM -0300, Fabricio Rocha wrote:
> Thank you very much, Yeti and Samuel, for your replies!
> 
[...]
>       I have a suspicion from my lack of practice in C: a module of my 
> program uses a structured type which must contain, as its last member, a 
> dynamic list of strings, i.e., pointers to gchars (**list). Sometimes I 
> need to fill only the first string, and sometimes I will need more than 
> one string. So I suspect that each attempt to set a value for one of 
> these pointers cause a serious corruption of other areas of the program, 
> like the GTK stuff in memory. I have tried to assign values to this 
> (these) pointers both with g_strdup and by creating a local, initialized 
> array and assigning its address to the pointer. Neither worked. Do you 
> think I should give each pointer a malloc'd space somewhere in memory, 
> and then strcpy the value to this pointer?

This one indeed looks suspicious, so your hunch might be well sounded
;-)

As far as C cis concerned, gchar **list is just a pointer to a pointer
to a char (or a pointer to a char array -- C does not make a difference
here. See a good C reference for this. I'd recommend Kerninghan &
Ritchies classic book which albeit old is extremely clear in those
basics. For a quick lookup, this
<ttp://www.cs.cf.ac.uk/Dave/C/node10.html#SECTION001030000000000000000>
has some details on pointers, arrays and all that).

The upshot is, you'd better make sure that **list points to whatever
makes sense in your context. But we'll never know for sure if you don't
show us the code :-)

>       By the way, I have read a lot of GDB and Valgrind docs, and still could 
> not get anything from them. [...]

Gdb and valgrind are powerful tools, but you'll have to have a good
working model of what is going on inside your program to make sense of
them. For example, gdb is quite at a loss with stray pointer problems.
With those, the fault pokes a hole somewhere which might well trip up
the application much later, at a seemingly unrelated place (e.g. when
ten layers of functions have returned, stumbling over the corrupt stack
area or when the memory allocator trees to free something at a place
where memory has been corrupted). Go find that then :-)

HTH
-- tomás
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to