0

char* XX (char* str) { // 既存の文字列を str で CONCAT し、ユーザーに返す }

そして、私はこのプログラムを次のように呼び出します:

XX ( strdup("CHCHCH") );

これにより、生成されたものを解放せずにリークがstrdup()発生しますか?

free の結果がXX() 仕事をする可能性は低いです。

(C と C++ の両方で教えてください、ありがとう!)

4

3 に答える 3

3

XX 関数 free() が渡された引数でない限り、はい、C と C++ の両方でメモリ リークが発生します。

于 2011-11-11T09:09:45.217 に答える
1

はい。freeの結果には何かが必要ですstrdup

Boehm のガベージ コレクターの使用を検討し、 GC_strdup&GC_mallocの代わりにstrdup&を使用できmallocます。そうすれば、わざわざ電話する必要はありませんfree

于 2011-11-11T09:09:13.113 に答える
1

はい、これは漏れます。strdupの結果を解放する必要があります。

一方、C++ の場合は、次のstd::string代わりに使用することをお勧めしchar*ます。

std::string XX( std::string const & in )
{
   return in + std::string( "Something to append" );
}

これは、あなたが話していることを実装するための簡単で汚い方法ですが、非常に読みやすいです。出力用の文字列への変更可能な参照を渡すことで速度をいくらか向上させることができますが、これが非常にタイトなループでない限り、そうする理由はほとんどありません.

于 2011-11-11T09:44:10.987 に答える