gpt4 book ai didi

c# - 在循环中使用方法 Marshal.PtrToStructure 时出现访问冲突异常

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:58 25 4
gpt4 key购买 nike

在我的程序 (C#) 中,我使用方法 Marshal.PtrToStructure 将对象转换为在循环中将内存地址添加到结构。在第一个元素,这个工作正常。但是在第二个元素处,发生了访问冲突异常。

access violation异常只出现在win 7(64位),win xp(32位)不会出现。

我不知道它的原因和解决方法。

请帮帮我。

注意:我使用的是 .NET Framework 3.5。

代码如下:

[StructLayout(LayoutKind.Sequential)]
public struct gpc_vertex
{
public float x;
public float y;
};

private ArrayList DoPolygonOperation()
{
IntPtr currentVertex = vertexList.vertexes;

gpc_vertex oVertext = new gpc_vertex();

for (int j = 0; j < vertexList.num_vertices; j++)
{
PositionF pos = new PositionF();
oVertext = (gpc_vertex)Marshal.PtrToStructure(currentVertex, typeof(gpc_vertex));
//Access violation exception
pos.X = oVertext.x;
pos.Y = oVertext.y;
Marshal.DestroyStructure(currentVertex, typeof(gpc_vertex));
currentVertex = (IntPtr)((int)currentVertex.ToInt64() + Marshal.SizeOf(oVertext));

posList.Add(pos);
}
}

谢谢。

最佳答案

当我更改一些代码时,不会发生访问冲突。但是,我不明白这个问题的根本原因。发生什么访问冲突异常?

代码修改如下:

private ArrayList DoPolygonOperation()
{
IntPtr currentVertex = vertexList.vertexes;

gpc_vertex oVertext = new gpc_vertex();
int currentOffset = 0;
for (int j = 0; j < vertexList.num_vertices; j++)
{
PositionF pos = new PositionF();
oVertext = (gpc_vertex)Marshal.PtrToStructure((IntPtr)(currentVertex.ToInt64() + currentOffset), typeof(gpc_vertex));
pos.X = oVertext.x;
pos.Y = oVertext.y;
Marshal.DestroyStructure(currentVertex, typeof(gpc_vertex));
currentOffset += Marshal.SizeOf(oVertext);

posList.Add(pos);
}
}

关于c# - 在循环中使用方法 Marshal.PtrToStructure 时出现访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16931369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com