問題は、オブジェクトparm
がその関数に対してローカルであることです。関数の呼び出しが終了した後、それへのポインターを取得して保持する (つまり、返す) ことは正しくありません。
つまり、parm
機能が存在する間は「生きている」。関数がすべてのローカル オブジェクト ( などparm
) を返すときは、「死ぬ」。
crush
コメントにあるようにpointer1
、無効なポインターになり、愛情を込めて「ぶら下がっている」ポインターとも呼ばれます。
正しい方法を教えてください!!
要求に応じて、これを「正しく」実行する方法がいくつかあります。
parm + 1
直接戻り、関数の戻り値の型を変更します。本当にポインターが必要なようには聞こえません
パラメーターをポインター (または参照、これは C++ です) として受け取り、そのポイントされた値をインクリメントします。必要に応じて返すこともできます-関数の外から来るので、返すことは有効です
staticstatic int sparm; sparm = parm + 1
を追加し、へのポインターを返しますsparm
。これにより、関数が再入不可になりますstatic
が、機能します。関数呼び出しが終了してもオブジェクトは死にません
ポインターにメモリを割り当てて (ああ! やめて!)、それを返します。
コードを注意深く読むと、ポインターが決して有効ではないことは明らかです。最初から、として利用可能なメモリを超えて 1 スロットですparm
。