JNI_CreateJavaVM:如果在发生故障时抛出异常,则缓冲区溢出

Dom*_*etz 6 c++ java-native-interface exception

在C++项目中,我使用JNI调用API来启动JVM.我在JVM上做了一个小包装,所以我可以以OO方式使用所有需要的部件.到目前为止,这很有效.

现在,如果JVM没有启动(JNI_CreateJavaVM返回值<0),我想在我的C++代码中引发异常.但是如果我之后抛出异常JNI_CreateJavaVM,我会得到一个缓冲区溢出.如果我在没有JNI_CreateJavaVM调用的情况下引发异常,它将按预期工作.

有没有人知道这里的问题是什么?或者如何调试这个?

环境:Windows,Visual Studio 2008 JDK:jrockit27.6jdk16005,但也与SUN股票一起发生

干杯多米尼克

And*_*Eve 2

在我看来,您正在抛出一个指向无效内存的指针或引用。通过引用抛出异常是个好主意,但要确保该对象不在堆栈上。如果对象是使用“new”分配的,则需要正确管理它(否则会出现泄漏)。我的方法是尝试尽可能多地抛出 const 对象。

这有帮助吗?