2011-11-11 28 views
0

のchar * XX(のchar *文字列) 次のstrdup()を使用すると、Cでメモリリークが発生しますか?

{STRと // CONCAT既存の文字列、およびユーザー に戻る}と私はすることで、このプログラムを呼び出す:

XX (strdup("CHCHCH"));

ウィルこのstrdup()が生成するものをリリースしていない間にリークを引き起こしますか?

XX()の結果が無料になる可能性は低いです。

答えて

3

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

1

はい(私は両方のCおよびC++で、感謝を!教えてください)。何かがfreeの結果であり、結果はstrdupです。

あなたはBoehm's garbage collectorの使用を検討し、代わりにstrdup & mallocGC_strdup & GC_mallocを使用することができます。 free

1

はい、これはリークします。 strdupの結果を解放する必要があります。 C++のために

は、他の一方で、私はむしろchar*よりstd::stringを使用することをお勧め:

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

これは、あなたが何を言ってるのか実装するための迅速かつ汚い方法ですが、それは非常に読みやすいです。出力のために文字列への可変参照を渡すことでいくらかの速度改善を得ることができますが、これは非常にタイトなループでなければ、パフォーマンスを大幅に向上させることなく複雑化を招く可能性があるためです。

関連する問題