gpt4 book ai didi

java - JNI 函数 Java_java_io_WinNTFileSystem_rename0 内存泄漏?

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:21 24 4
gpt4 key购买 nike

我认为http://download.java.net/openjdk/jdk6/promoted/b27/openjdk-6-src-b27-26_oct_2012.tar.gz中的文件jdk/src/windows/native/java/io/WinNTFileSystem_md.c中有以下函数如果发现其中之一为 NULL,则忽略释放 frompathtopath 使用的内存...

JNIEXPORT jboolean JNICALL
Java_java_io_WinNTFileSystem_rename0(JNIEnv *env, jobject this, jobject from,
jobject to)
{

jboolean rv = JNI_FALSE;
WCHAR *frompath = fileToNTPath(env, from, ids.path);
WCHAR *topath = fileToNTPath(env, to, ids.path);
if (frompath == NULL || topath == NULL)
return JNI_FALSE;
if (_wrename(frompath, topath) == 0) {
rv = JNI_TRUE;
}
free(frompath);
free(topath);
return rv;
}

我错过了什么吗?这实际上是一个错误吗?

已解决:  进一步查看 io_util_md.c 中的函数 pathToNTPath 的详细信息,我可以看到,在内存不足错误的情况下,fileToNTPath 只会返回 NULL,所以我想我们并不关心在 JVM 即将崩溃时是否忽略释放 malloc 的东西!但在我看来,这仍然应该记录在 Java_java_io_WinNTFileSystem_rename0 函数中。

最佳答案

我认为原来的观点是正确的。虽然对该代码使用的其他函数的研究确实表明问题可能并不那么重要,但从其本身来看,该代码是缺乏的。

代码审查的一般规则是,如果有人有问题,通常应该在代码中至少用注释来回答。

注释的一般规则是,如果它可以用代码表达,它就可能应该用代码表达。

如果编写代码来消除这些问题,所有这些问题都会消失。

关于java - JNI 函数 Java_java_io_WinNTFileSystem_rename0 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com