[英]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.