The following code doesn't allocate indipendents parts of memory for the
strings but overwrites totally or partially the locations of memory, loosing
the real content of the strings.
It's a bug o ...
I noticed that 'free()' breaks after a few (on the third) freeing. The free routine calls 'traverse()'. Traverse walks to the end of the freed memory and spins on the last node.