2011-11-11 5 views
0

문자 * XX (숯불 * str을) 다음 strdup()를 사용하면 C에서 메모리 누수가 발생합니까?

{STR과 // CONCAT 기존 문자열 및 사용자 로 돌아} 그리고 난으로이 프로그램을 호출

XX (strdup("CHCHCH"));

윌이 strdup()에서 생성되는 것을 방출하지 않으면 서 누출이 발생합니까?

XX()의 결과는 무료 일 가능성이 낮습니다.

(C 및 C++ 모두에게 알려주십시오. 감사합니다.)

답변

3

XX 함수가 free() 인수가 전달되지 않는 한, C와 C++ 모두에서 메모리 누수가 발생합니다.

1

예. 뭔가 free의 결과는 strdup입니다.

당신은 Boehm's garbage collector 사용을 고려하고 GC_strdup & GC_malloc 대신 strdup & malloc 사용할 수 있습니다; 호출에 대해 신경 쓸 필요가 없습니다. free

1

예 유출됩니다. strdup의 결과를 공개해야합니다.

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

이 당신이 무슨 말을하는지 구현하는 빠른 더러운 방법이지만, 그것은 매우 읽을 : C++에 대한

, 다른 한편으로는, 나는 char*보다는 std::string를 사용하는 것이 좋습니다. 출력을 위해 문자열에 대한 가변적 인 참조를 전달함으로써 속도 향상을 얻을 수 있지만, 매우 단단한 루프에 있지 않으면 성능을 크게 높이 지 않고 복잡성이 증가 할 가능성이 있기 때문에 약간의 이유가 있습니다.