のchar * XX(のchar *文字列) 次のstrdup()を使用すると、Cでメモリリークが発生しますか?
{STRと // CONCAT既存の文字列、およびユーザー に戻る}と私はすることで、このプログラムを呼び出す:
XX (strdup("CHCHCH"));
ウィルこのstrdup()
が生成するものをリリースしていない間にリークを引き起こしますか?
XX()
の結果が無料になる可能性は低いです。
のchar * XX(のchar *文字列) 次のstrdup()を使用すると、Cでメモリリークが発生しますか?
{STRと // CONCAT既存の文字列、およびユーザー に戻る}と私はすることで、このプログラムを呼び出す:
XX (strdup("CHCHCH"));
ウィルこのstrdup()
が生成するものをリリースしていない間にリークを引き起こしますか?
XX()
の結果が無料になる可能性は低いです。
XX関数free()の引数が渡されない限り、これはCとC++の両方でメモリリークを引き起こします。
はい(私は両方のCおよびC++で、感謝を!教えてください)。何かがfree
の結果であり、結果はstrdup
です。
あなたはBoehm's garbage collectorの使用を検討し、代わりにstrdup
& malloc
のGC_strdup
& GC_malloc
を使用することができます。 free
はい、これはリークします。 strdup
の結果を解放する必要があります。 C++のために
は、他の一方で、私はむしろchar*
よりstd::string
を使用することをお勧め:
std::string XX(std::string const & in)
{
return in + std::string("Something to append");
}
これは、あなたが何を言ってるのか実装するための迅速かつ汚い方法ですが、それは非常に読みやすいです。出力のために文字列への可変参照を渡すことでいくらかの速度改善を得ることができますが、これは非常にタイトなループでなければ、パフォーマンスを大幅に向上させることなく複雑化を招く可能性があるためです。