Мне было интересно, можно ли вернуть фиксированный указатель из одного метода в другой метод - фиксируется ли фиксированный объект? напримерВозвращает фиксированный указатель в C#
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. Но так как я изменил его, например, установить значение прямо из класса 1, я не видел, чтобы проблема возникла.
EDIT: Причина, по которой я думал, что она может быть исправлена, если извне «TestData» ptr = x.GetDataPtr() «вы пытаетесь установить fixed(), вы получаете« вы не можете взять адрес уже установленного выражение». .. Я получаю это сейчас, хотя это говорит о том, что мой var «ptr» в «Test()» уже исправлен.
Это очень хороший момент, спасибо! (см. мой EDIT, почему я думал, что это может быть сделано) – user555265