Мне было интересно, безопасно ли возвращать фиксированный указатель из одного метода в другой метод - закрепленный объект все еще остается фиксированным?например,
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 (), вы получаете« вы не можете взять адрес уже фиксированного выражения »... Теперь я понимаю, что это говорит о том, что моя переменная "ptr" в "Test ()" уже исправлена ..