고정 된 포인터를 한 메서드에서 다른 메서드로 반환하는 것이 안전한지 - 고정 된 개체가 여전히 고정되어 있습니까? 예 :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 예외를 얻었습니다. 하지만 예를 들어 Class1에서 직접 값을 설정 난 문제가 발생 보지 못했어요.
편집 : 나는 그것이 "TestData * ptr = x.GetDataPtr()"외부에서 고정()을 시도하면 고정되어있을 것이라고 생각하는 이유는 "당신은 이미 고정 된 주소를 취할 수 없습니다 표현". .. "Test()"가 이미 고정되어있는 내 var "ptr"에 대해 말하고 있지만 지금은 알 수 있습니다.
아주 좋은 지적입니다. 감사합니다! (내가 왜 이것을 할 수 있다고 생각으로 내 편집을 참조하십시오) – user555265