調べようと思ったきっかけは、golangでは以下のように ローカル変数のアドレスを戻り値としても問題ないということ。 package main import ( "fmt" ) type Animal struct { Name string Age int } func main() { animal := allocAnimal() fmt.Printf("allocate animal structure %p", animal) } func allocAnimal() *Animal { return &Animal{} } ポインタを扱えるC/C++ではローカル変数のポインタを戻り値とした場合、スタック領域のポインタを関数外に渡すため、 コンパイル時点で警告が表示されます。(なぜエラーにしない) 実行時には最悪、セグメンテーションフォールトで落ちます。 そのため、mallocや