ローカル配列の戻り: C での警告の理解と回避
次のコード スニペットを考えてみましょう。
char *recvmsg(){ char buffer[1024]; return buffer; } int main(){ char *reply = recvmsg(); ..... }
Thisこのコードは、recvmsg() 関数を通じて char 配列を取得することを目的としています。ただし、次の警告がトリガーされます。
warning C4172: returning address of local variable or temporary
この警告は、recvmsg() からの戻り値がローカル変数のアドレスであることを示します。変数の有効期間は関数の終了時に終了するため、これは不適切です。
解決策: std::vector
この問題に対処するには、より良いこのアプローチは、std::vector
std::vector を使用した更新されたコードは次のようになります。
std::vector<char> recvmsg() { std::vector<char> buffer(1024); //.. return buffer; } int main() { std::vector<char> reply = recvmsg(); }
Char データへのアクセス:
Ifベクターから生の char データにアクセスする必要があります。 use:
void f(const char* data, size_t size) {} f(&reply[0], reply.size());
このメソッドを使用すると、ベクトルを C API または char* を期待する C API とシームレスに統合できます。
new:
C での new の使用は最小限に抑えることが一般的に推奨されます。 std::vector のようなコンテナに依存することで、手動メモリ管理の必要性がなくなり、メモリ リークの可能性が減り、コードの保守性が向上します。
以上がC でローカル配列を返すと警告が生成されるのはなぜですか? `std::vector` を使用して警告を修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。