1

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

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.cpathToNTPath中函数的详细信息,我可以看到它只会在内存不足错误的情况下返回,所以我想我们不在乎是否忽略了释放我们编辑的东西当JVM即将崩溃时!在我看来,这仍然应该记录在函数中。fileToNTPathNULLmallocJava_java_io_WinNTFileSystem_rename0

4

3 回答 3

1

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

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

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

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

于 2013-04-07T11:27:19.583 回答
0

从我可以看到pathToNTPath(),它被 调用fileToNTPath(),它仅在 的情况下返回 NULL OutOfMemoryException,所以我想可以安全地假设一个人不需要太在意释放几个字节的路径名。

于 2013-04-07T10:19:06.833 回答
0

已解决:  进一步查看io_util_md.cpathToNTPath中函数的详细信息,我可以看到它只会在内存不足错误的情况下返回,所以我想我们不在乎是否忽略了释放我们编辑的东西当JVM即将崩溃时!在我看来,这仍然应该记录在函数中。fileToNTPathNULLmallocJava_java_io_WinNTFileSystem_rename0

于 2013-04-08T08:53:21.613 回答