Domanda

First, I allocate memory and get the pointer:

IntPtr pointer = Marshal.AllocHGlobal(size);

Then, I try to release the memory pointed by my pointer:

Marshal.FreeHGlobal(pointer);

But in my application it raises sometimes a fatal unknown exception with just this explaination: "a memory fragment has been damaged". I guess this is because I try to free a pointer that points to a memory block already disallocated by freeing another pointer...

My question is: using the IntPtr pointer, is there any way to check if the memory block is still allocated or has been already disallocated ?

È stato utile?

Soluzione

The good way to free your pointer is Marshal.FreeHGlobal(), so if it is disallocated, it's a logic problem, but you could do it in a try/catch, so it's already disallocated if you get into the catch exception.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top