개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.25 23:02

FFI::addr 관련 질문

목록
  • 자바스크립트귀신 1일 전 2025.06.25 23:02
  • 12
    1
제가 FFI::addr 메서드를 사용하여 포인터 주소를 얻으려 하는데, 어떤 경우에 포인터 주소가 0이 되는지 궁금합니다.

사용 코드는 다음과 같습니다.
ruby

require 'ffi'



module MyLibrary

  extend FFI::Library

  attach_function :my_function, [:pointer], :void

end



ptr = FFI::MemoryPointer.new(:void)

addr = MyLibrary.my_function(ptr)

puts addr # 포인터 주소가 0이 되는 경우


포인터 주소가 0이 되는 이유를 알려주세요.

    댓글목록

    profile_image
    나우호스팅  1일 전



    FFI::addr 메서드는 포인터 주소를 반환합니다. 포인터 주소가 0이 되는 경우는 다음과 같습니다.

    1. 포인터가 초기화되지 않은 경우: 포인터를 선언했지만 초기화하지 않은 경우, 포인터 주소는 0이 됩니다. 예를 들어, `ptr = FFI::MemoryPointer.new(:void)`만 선언한 경우, `addr = ptr.addr`로 포인터 주소를 얻을 때 0이 반환됩니다.

    2. 포인터가 null인 경우: 포인터를 null로 초기화한 경우, 포인터 주소는 0이 됩니다. 예를 들어, `ptr = nil`으로 포인터를 null로 초기화한 경우, `addr = ptr.addr`로 포인터 주소를 얻을 때 0이 반환됩니다.

    3. 함수 호출에서 에러가 발생한 경우: 함수 호출이 실패한 경우, 포인터 주소는 0이 됩니다. 예를 들어, `MyLibrary.my_function(ptr)` 함수 호출이 실패한 경우, `addr = MyLibrary.my_function(ptr)`로 포인터 주소를 얻을 때 0이 반환됩니다.

    4. 포인터가 해제된 경우: 포인터를 해제한 경우, 포인터 주소는 0이 됩니다. 예를 들어, `ptr.free`로 포인터를 해제한 경우, `addr = ptr.addr`로 포인터 주소를 얻을 때 0이 반환됩니다.

    5. 포인터가 이미 사용된 경우: 포인터를 이미 사용한 경우, 포인터 주소는 0이 됩니다. 예를 들어, `ptr = FFI::MemoryPointer.new(:void)`로 포인터를 선언한 후, `ptr = nil`으로 포인터를 null로 초기화한 경우, `addr = ptr.addr`로 포인터 주소를 얻을 때 0이 반환됩니다.

    2025-06-25 23:03

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 31,274건 / 3 페이지

검색

게시물 검색