C でのローカル配列の管理 : メモリ リークの回避
目前の問題は、関数からローカル配列を返そうとするときに発生します。指定されたコード スニペットに例示されているように:
char *recvmsg() { char buffer[1024]; return buffer; }
このアプローチでは、戻りアドレスが有効期間が限られたローカル変数を指しているため、警告がトリガーされます。
この問題に対処するには、次のようにします。配列の安定した寿命を保証する代替データ構造を採用することをお勧めします。実行可能なオプションの 1 つは、標準ライブラリ コンテナ、特に std::vector
これは、recvmsg 関数の改訂版です。
std::vector<char> recvmsg() { std::vector<char> buffer(1024); // ... return buffer; }
main 関数内では、配列std::vector
std::vector<char> reply = recvmsg();
char* アドレスにアクセスする必要がある場合は、次の方法で取得できます:
&reply[0]
このアプローチでは、配列のメモリ割り当てを内部で管理することで問題を軽減します。これにより、未定義の動作やメモリ リークの可能性が防止されます。
以上がC 関数から安全に配列を返し、メモリ リークを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。