2011-11-11 103 views
0

的char * XX(字符* STR) {// CONCAT現有的字符串海峽,並退回到用戶 }以下使用strdup()會導致C中的內存泄漏嗎?

而且我通過調用這個程序:

XX (strdup("CHCHCH"));

請問這個導致泄漏而不釋放什麼strdup()生成?

這不可能是免費的XX()的結果將完成這項工作。

(請讓我知道C和C++,謝謝!)

回答

3

除非XX函數free()的參數傳入,否則這會導致C和C++中的內存泄漏。

1

是的。 strdup的結果必須爲free

你可以考慮使用Boehm's garbage collector和使用GC_strdup & GC_malloc而不是strdup & malloc;那麼你不需要打擾打電話free

1

是的,這會泄漏。 strdup的結果必須被釋放。

對於C++,在另一方面,我建議使用std::string而不是char*

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

這是爲了實現你在說什麼一個快速和骯髒的方式,但它是非常具有可讀性。通過將可變引用傳遞給輸出字符串,您可以獲得一些速度提升,但除非這是一個非常緊密的循環,否則沒有什麼理由這樣做,因爲它可能會增加複雜性而不會顯着引導性能。