C#调研C++代码出现:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
结构体
[StructLayout(LayoutKind.Sequential)] public struct DEVICE_DATA { public byte[] a; public int b; public int c; public byte[] d; public byte[] e; public byte[] f; public int g; }
device_DATA是在C#中赋值,想得到他的指针,却一直报错,
调用代码:
IntPtr record= Marshal.AllocHGlobal(Marshal.SizeOf(device_DATA));; try { Marshal.StructureToPtr(device_DATA, record, true); //在上面报错尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 int error = FuncStatisticProvider.SendDeviceData(handle, record); } catch (Exception ex) { Marshal.FreeHGlobal(record); }
Marshal.SizeOf(device_DATA) 看看这个大小,是否正确。
鉴于你在结构体里定义的是 byte[],同时没有指定 ArraySize,Marshal.SizeOf可能不能正确计算出大小。
恩,你这个是对的,不过不是这个问题,C++程序的问题 已经解决了
是否和字节对齐有关,VC++的默认对齐是8
参考一些总结 http://blog.csdn.net/binarie/article/details/6636595