ホームページ >バックエンド開発 >C++ >C でローカル変数へのポインタを安全に返すにはどうすればよいですか?

C でローカル変数へのポインタを安全に返すにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-29 07:34:13397ブラウズ

How to Safely Return a Pointer to a Local Variable in C  ?

C でローカル変数へのポインタを返す方法

C では、ローカル変数へのポインタを返すことは一般的に推奨されません。関数の終了時に変数のメモリ空間の割り当てが解除される可能性があるためです。ただし、特定のシナリオでは、これを実現する必要がある場合があります。

整数へのポインターを返す関数を作成する必要があるシナリオを考えてみましょう。

int *count()
{
    int myInt = 5;

    int * const p = &myInt; // Pointer to the local variable

    return p;
}

この場合この問題は、関数の終了時に myInt 変数が破棄され、ポインタが無効なメモリ位置を指したままになるために発生します。

これに対処するにはこの問題を解決するには、変数に割り当てられたメモリを自動的に管理するスマート ポインターを利用できます。たとえば、 unique_ptr を使用できます:

unique_ptr<int> count()
{
    unique_ptr<int> value(new int(5));
    return value;
}

ここで、 value は動的に割り当てられた整数のメモリを管理する unique_ptr です。これにより、関数の終了時に整数のメモリの割り当てが解除されず、返されたポインタを介して整数にアクセスできるようになります:

cout << "Value is " << *count() << endl;

以上がC でローカル変数へのポインタを安全に返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。