char* XX (char* str) { // 既存の文字列を str で CONCAT し、ユーザーに返す }
そして、私はこのプログラムを次のように呼び出します:
XX ( strdup("CHCHCH") );
これにより、生成されたものを解放せずにリークがstrdup()
発生しますか?
free の結果がXX()
仕事をする可能性は低いです。
(C と C++ の両方で教えてください、ありがとう!)
char* XX (char* str) { // 既存の文字列を str で CONCAT し、ユーザーに返す }
そして、私はこのプログラムを次のように呼び出します:
XX ( strdup("CHCHCH") );
これにより、生成されたものを解放せずにリークがstrdup()
発生しますか?
free の結果がXX()
仕事をする可能性は低いです。
(C と C++ の両方で教えてください、ありがとう!)
XX 関数 free() が渡された引数でない限り、はい、C と C++ の両方でメモリ リークが発生します。
はい。free
の結果には何かが必要ですstrdup
。
Boehm のガベージ コレクターの使用を検討し、 GC_strdup
&GC_malloc
の代わりにstrdup
&を使用できmalloc
ます。そうすれば、わざわざ電話する必要はありませんfree
はい、これは漏れます。strdup
の結果を解放する必要があります。
一方、C++ の場合は、次のstd::string
代わりに使用することをお勧めしchar*
ます。
std::string XX( std::string const & in )
{
return in + std::string( "Something to append" );
}
これは、あなたが話していることを実装するための簡単で汚い方法ですが、非常に読みやすいです。出力用の文字列への変更可能な参照を渡すことで速度をいくらか向上させることができますが、これが非常にタイトなループでない限り、そうする理由はほとんどありません.