oh. ha. i know how it's working.
it should not possibly be working, but it is. through luck.
we are allocating 32 bytes on the stack, writing something like md=8 into them,
adding them to a smartlist, unallocating them, repeating.
at the end, we have a smartlist of a bunch of unallocated 32 byte entries
we join them all up together (reading the unallocated memory, which is bad),
then we try to free each of the unallocated addresses, which are on the stack