English 中文(简体)
JNI 摆脱记忆
原标题:JNI Freeing Memory to Avoid Memory Leak
  • 时间:2009-10-07 18:32:55
  •  标签:

因此,根据我的 Java方案,“C++”方案通过“国家情报和安全局”进行:

    JNIEXPORT jstring JNICALL Java_com_entrust_adminservices_urs_examples_authn_LdapAuthenticator2_takeInfo(JNIEnv *env, jobject obj, jstring domain, jstring id, jstring idca, jstring password) 
{
    const char *nt_domain;
    const char *nt_id;
    const char *nt_password;
    HANDLE hToken = 0;

    bool aut = false;

    nt_domain = env->GetStringUTFChars(domain, NULL);
    nt_id = env->GetStringUTFChars(id, NULL);
    nt_password = env->GetStringUTFChars(password, NULL);

      aut = LogonUser(nt_id, nt_domain, nt_password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken );

      /* release buffers */
    env->ReleaseStringUTFChars(domain, nt_domain);
    env->ReleaseStringUTFChars(id, nt_id);
    env->ReleaseStringUTFChars(password, nt_password);
    /* release the login handle */
    CloseHandle(hToken);

    if(aut)
    {
        return env->NewStringUTF("true"); 
    }

    DWORD dwError = GetLastError();
      LPVOID lpMsgBuf;

      FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT ), (LPTSTR) &lpMsgBuf, 0, NULL );

    return env->NewStringUTF((const char*)lpMsgBuf); //returns the contents of lpMsgBuf (error)
}

在第二行至最后一行,jstring newString = env-> NewStringUTF(const char*)otherString);从没有被释放,但返回后,是否会造成最终的记忆泄露? 是否有办法解决这一问题?

另外,还有可能不归还一只str子(如由LogonUser功能归还),而不用 j,而是在方法上添加“护堤”的 re,并更新? 我的贾瓦方案是否能够看到“护堤”的最新情况?

感谢。

最佳回答

NewStringUTF(> 产生新的 j。 换言之,试图——在 Java粒上的一个物体,如果不再提及该物体,就会收集该物体。

或请问<代码>其他标准? 我不知道是什么样子,但像现在这样,它会把记忆传给C。 如果是,那么,你必须明确释放这一记忆。

有时通过制定<条码>其他标准,使你的生活更加艰难。 不要这样做。 相反,请打电话NewStringUTF(>,在您的座位上,并在第二例中免除了本土的地块。

问题回答

你不必担心新StringUTF所分配的记忆,因为 Java垃圾收集器将予以照顾。

但是,在你通过表格MAT_MESSAGE_ALLOCATE_BUFFER到格式Message(即:你必须使用当地自由来自由进行这一缓冲)时,你必须放行灯光(http://msdn.microsoft.com/en-us/library/ms679351(VS.85)。





相关问题
热门标签