簡體   English   中英

Marshal.StructureToPtr 處的訪問沖突

[英]access violation at Marshal.StructureToPtr

嗨,我有這個結構

 [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;
            }
        }

我試圖將結構的內容轉換為字節數組,以便通過網絡發送它並在另一台計算機上檢索它,但在代碼中(如上所述)我收到了一個錯誤:

嘗試讀取或寫入受保護的內存。

這通常表明某些內存已損壞。 我不知道為什么,對我來說一切都很好,但是元帥正在嘗試訪問受保護的內存......

如何將結構實例轉換為字節數組? 我用一個簡單的memcpy在 c++ 中完美地完成了它,但在 c# 中我不能。

true參數是要求框架刪除源內存。 當然,這個內存不是由編組器分配的,所以它失敗了。 請嘗試以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM