My understanding is that `MemoryPointer` [allocates](https://github.com/ffi/ffi/blob/master/ext/ffi_c/MemoryPointer.c#L106) memory based on the `type` and `size` parameters, e.g. `(:uint32, 1)`, and that that memory will be [freed](https://github.com/ffi/ffi/blob/master/ext/ffi_c/MemoryPointer.c#L134) when the `MemoryPointer` is gc'ed. Note that the `MemoryPointer` storage is allocated/freed via C runtime libraries.

But in the `ffsd` case, the value returned is the address to memory allocated by windows, which we need to free using `LocalFree` instead of C runtime libraries, otherwise memory corruption will occur.