Frage

Ich denke, ja, aber die Top-12 Beispiele, die ich alle etwas tun, nicht illustrativ wie

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

so für die Nachwelt werde ich fragen: das ist schlecht, ja

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

... und soll sein:

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;
}
War es hilfreich?

Lösung

Ja. (Nur so ist dies nicht unbeantwortet sehen.)

Andere Tipps

Es ist gut, um Speicherlecks betroffen zu sein, aber in diesem Fall gibt es kein Leck vorhanden ist (Original Beispiel). "Constant string" ist eine Zeichenkette; es wird nicht aus dem Heap zugewiesen.

Also, nein, Sie brauchen nicht auf die Zeichen zu bereinigen * übergeben (Original Beispiel).

Ihre bearbeitete Beispiele sind besser für Ihren Punkt darstellt. Im editierten Beispiel ja, müssen Sie die übergebene Zeichenfolge aufzuräumen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top