【发布时间】:2012-01-05 14:18:28
【问题描述】:
我想知道将固定指针从一种方法返回到另一种方法是否安全 - 固定对象是否仍然保持固定?例如
struct TestData
{
public int value;
}
public class Class1
{
private TestData data;
public unsafe TestData* GetDataPtr()
{
fixed (TestData* ptr = &data)
{
// IS THIS SAFE?
return ptr;
}
}
}
public class Class2
{
public unsafe void Test()
{
Class1 x = new Class1();
TestData* ptr = x.GetDataPtr(); // is this still fixed?
ptr->value = 2;
}
}
我问的原因是使用这种风格的东西,我一直得到 AccessViolation 异常。但是自从我将其更改为例如直接从 Class1 设置值我还没有看到问题发生。
编辑: 我认为它可能已修复的原因是,如果从“TestData* ptr = x.GetDataPtr()”外部尝试放置 fixed(),则会得到“您无法获取已经固定表达式的地址”。 ..我现在明白了,虽然它说的是我在“Test()”中的 var“ptr”已经被修复了..
【问题讨论】: