C でローカル配列を返す : メモリ リークを回避する
C でローカル配列を返すとメモリ リークが発生する可能性があります。次の例を考えてみましょう。
char *recvmsg() { char buffer[1024]; return buffer; } int main() { char *reply = recvmsg(); ... }
ここで、recvmsg 関数はローカル配列バッファへのポインタを返します。ただし、この配列は関数が返されるときに破棄され、ダングリング ポインタが残ります。後でこのポインターにアクセスすると、未定義の動作が発生し、メモリ リークが発生する可能性があります。
std::vector を返す
この問題を解決するには、 std::vectorstd::vector<char> recvmsg() { std::vector<char> buffer(1024); ... return buffer; } int main() { std::vector<char> reply = recvmsg(); }
std::vector で char* を使用する
コード内の他の場所で char* を使用すると、&reply[0] を使用して、 std::vector。例:void f(const char* data, size_t size) {} f(&reply[0], reply.size());
new の使用を避ける
最後に、new の使用を可能な限り避けることをお勧めします。 new を使用して手動でメモリを管理すると、割り当てられたメモリが適切に割り当て解除されていない場合、メモリ リークが発生する可能性があります。代わりに、メモリを自動的に管理する std::vector のようなコンテナを利用してください。以上がC 関数から安全に配列を返し、メモリ リークを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。