C# Marshal.StructureToPtr处的访问冲突

C# Marshal.StructureToPtr处的访问冲突,c#,sockets,memory,struct,marshalling,C#,Sockets,Memory,Struct,Marshalling,嗨,我有这个结构 [StructLayout (LayoutKind.Sequential)] public struct Transfer_packet { public int _packet_type; // 0 is action 1 is data public int _packet_len; // length of data public byte[] _data;//;= new

嗨,我有这个结构

  [StructLayout (LayoutKind.Sequential)]
 public struct Transfer_packet 
        {
            public int  _packet_type; // 0 is action 1 is data
            public int _packet_len; // length of data
            public byte[] _data;//;= new byte[DataLenght];
            public void fill()
            {

            }
            public byte[] deserialize()
            {
                int size = System.Runtime.InteropServices.Marshal.SizeOf(this);
                byte[] arr = new byte[size];
                IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(size);
                System.Runtime.InteropServices.Marshal.StructureToPtr(this, ptr, true);  // error raised
                System.Runtime.InteropServices.Marshal.Copy(ptr,arr,0,size);
                System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr);
                return arr;
            }
        }
我试图将struct的内容转换为字节数组,以便通过网络发送并在其他计算机上恢复它,但在我上面提到的代码中,我在尝试读取或写入受保护内存时出错。这通常表示其他内存已损坏。我不明白为什么每件事情看起来都很好,但是元帅试图访问受保护的内存,我怎么能把一个结构数据转换成一个字节数组,在它的块中,我用C++完成了一个简单的MimcPy,但是在C中引起错误!!!p>
谢谢参数
true
要求框架删除源内存。当然,这个内存不是由封送员分配的,所以它失败了。请尝试以下操作:

System.Runtime.InteropServices.Marshal.StructureToPtr(this, ptr, false);

它会导致内存泄漏;(我的问题是,我想在网络上以传输包格式发送一块数据,并在用vc++@saeed编写的其他应用程序中接收它。您如何检测这个“内存泄漏”?您的权利…它没有检测到内存泄漏,但我正在尝试将结构数据转换为字节数组并发送过来net@saeed好的,那怎么办呢?您必须确保使用任何编组属性(如
StructLayout
)您需要使该结构与本机结构兼容。如果没有关于本机方面的特定问题的指示,我将无法继续尝试并进一步提供帮助。