勘違いしていたので反省を込めて短い記事。
Ruby-FFIで関数に渡すポインタのポインタを作るときは、
ptr_ptr = FFI::MemoryPointer.new(:pointer)
の1行だけでOK。このとき、ptr_ptr は「ヌルポインタ」へのポインターである。
ptr = FFI::MemoryPointer.new(:pointer)
ptr_ptr = FFI::MemoryPointer.new(ptr)
とすると、ヌルポインタのポインタのポインタになってしまうので間違い。