2009-05-06 17 views
10

私はそうだと思うが、私はすべての見つかったトップ12の例がそう後世のために、私はNewStringUTFに渡されたchar *をクリーンアップする必要がありますか?

JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj) 
{ 
    return (*env)->NewStringUTF(env, "constant string"); 
} 

のような説明のない何かを求めますか:これは悪いです、はい?

JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj) 
{ 
    char *leak = malloc(1024); 
    leak[0] = '\0'; 
    return (*env)->NewStringUTF(env, leak); 
} 

...と次のようになります。

JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj) 
{ 
    char *emptystring = NULL; 
    jstring r = NULL; 
    emptystring = malloc(1024); 
    emptystring[0] = '\0'; 
    r = (*env)->NewStringUTF(env, emptystring); 
    free(emptystring); 
    emptystring = NULL; 
    return r; 
} 

答えて

10

はい。 (ちょうどこれは未回答のように見えません)

3

メモリリークが懸念されるのは良いですが、この場合リークはありません(元の例)。 "constant string"はリテラル文字列です。ヒープからは割り当てられません。

だから、渡されたchar *(元の例)をクリーンアップする必要はありません。

あなたの編集した例は、あなたのポイントを説明するのに適しています。編集した例では、渡された文字列をクリーンアップする必要があります。

関連する問題