@SergeySerge11

Почему в с# в стуктурах с static void* ptr указателем этот указтаель не равен нулю при инициализации?

И даже не как не изменить. В чем проблема
public unsafe struct Env{
 public static void*  Ptr=null; // почему не равен нулю
  
  public Env(){
    //Ptr =0x00323223322323
   if(Ptr!=null){ // в откладке показывает TRUE, но как-будто false отрбатывает
       // Он не равен нулю, но суда не попадает. 
    }
     Ptr=null; //  не срабатывает
     Ptr =  NativeMemory.AlignedAlloc(32 * 4, 32 * 4); // то же не срабатывает
   
}

}

знаю что можно IntPtr заменить, но не понимаю, почему через void* ptr установлен
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
// в откладке показывает TRUE, но как-будто false отрбатывает

Предположу, что это просто глюк дебаггера. У меня он вообще не может прочитать значение Ptr и пишет вот что:

Failed to read static field: Статическая переменная недоступна, поскольку еще не инициализирована. (Исключение из HRESULT: 0x8013131A). The error code is CORDBG_E_STATIC_VAR_NOT_AVAILABLE, or 0x8013131A.

Может быть, дебаггер пытается разыменовать указатель

Но если попытаться вывести в консоль значение Ptr, то будет 0:
unsafe {
  void* x = null; // Можно выводить и Env.Ptr - будет тот же результат
  Console.WriteLine((nint)x); // 0
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы