2009-05-06 11 views
10

myślę tak, ale top 12 przykładów znalazłem wszystko zrobić coś nie ilustracyjny jakCzy muszę wyczyścić znak * przekazany do NewStringUTF?

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

tak dla potomnych zadam: to jest złe, tak?

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

... i powinno być:

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; 
} 

Odpowiedz

10

Tak. (Tak więc nie wygląda to bez odpowiedzi).

3

Dobrze jest martwić się wyciekami pamięci, jednak w tym przypadku nie ma wycieku (oryginalny przykład). "ciąg stały" to ciąg literowy; nie jest on przydzielany ze sterty.

Tak, nie, nie trzeba oczyszczać znaku * przekazanego (oryginalny przykład).

Twoje edytowane przykłady są lepsze do zilustrowania Twojego punktu. W edytowanym przykładzie tak, musisz wyczyścić przekazany ciąg.

Powiązane problemy