LoginSignup
9
8

More than 5 years have passed since last update.

unsafe が unsafe なケース (1)

Last updated at Posted at 2015-08-06

golang で unsafe パッケージを使わざるを得ないケースがあるけれど、具体的にどういう場合に unsafe が本当に unsafe なのかは、あまり出てこない。

具体例を思いついたのでメモしておく。

func Danger(buf [4]byte) *uint32 {
    return (*uint32)(unsafe.Pointer(&buf))
}

func Safe(buf [4]byte) *uint32 {
    var ret uint32
    ret = *(*uint32)(unsafe.Pointer(&buf))
    return &ret
}

引数の buf がメモリ解放された後で、戻り値にアクセスできるかどうかを考えると、Danger がダメだとわかる。

ま、このケースはそもそもポインタ返すなというのもあるけれど。構造体だったらうっかりやる人もいるかもよ?パフォーマンスガーとか言いながら。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8