It is interesting that the exactly same memory blocks were allocated
for the interested data and dataDesc.
It's actually pretty likely... malloc( ) often reuses a recently-freed
block of the same size when it can, because this avoids heap
fragmentation and improves caching.
If you really want to see what's going on, set the environment
variable MallocScribble to 1 when running your program. This will
cause newly allocated blocks to be filled with 0xAA and freed blocks
to be filled with 0x55. It's a good way to track down references to
uninitialized or freed memory.