throw new OutOfMemoryException();
}
- for (int i = 0; i < str_array.Length; i++)
+ int i = 0;
+ try
{
- IntPtr str = MarshalStringToPtr(str_array[i]);
- Marshal.WriteIntPtr(ptr, i * IntPtr.Size, str);
+ for (i = 0; i < str_array.Length; i++)
+ {
+ IntPtr str = MarshalStringToPtr(str_array[i]);
+ Marshal.WriteIntPtr(ptr, i * IntPtr.Size, str);
+ }
+ }
+ catch (OutOfMemoryException oom)
+ {
+ for (i = i - 1; i >= 0; --i)
+ {
+ Marshal.FreeHGlobal(Marshal.ReadIntPtr(ptr, i * IntPtr.Size));
+ }
+
+ Marshal.FreeHGlobal(ptr);
+
+ throw oom;
}
}
return ptr;
{
for (int i = 0; i < length; i++)
{
- Marshal.FreeHGlobal(Marshal.ReadIntPtr(ptr, length * IntPtr.Size));
+ Marshal.FreeHGlobal(Marshal.ReadIntPtr(ptr, i * IntPtr.Size));
}
Marshal.FreeHGlobal(ptr);
}