private void Free() { if(!disposed) { for(var i = 0; i < segments.Length; i++) { var segment = originalPointers[i]; if(segments[i] != IntPtr.Zero) { Marshal.FreeHGlobal(segment); this.NoisyLog("Segment {0} freed.", i); } } } disposed = true; }