我正在使用SWIG包装一个用C ++编写的内部库来提供对Java的访问,直到现在我还没有遇到任何问题。
我有一个包含在Java代理类中的结构及其关联的getter和setter。生成的代码实际上确实有效。但是,在Java中对getter的足够调用之后,会发生分段错误并导致JVM崩溃。我在for-each循环中调用getter。例如:
for( NativeProxyClass t : ContainerOfNativeProxyClasses )
{
if( t.getSomeField() == 1 ) /// Segfault occurs in the native code corresponding with this getter only sometimes.
{
/// Do something with t.
}
}
我知道这可能很模糊,但我无法发布确切的代码。就像我说这是一个奇怪的问题,因为它并不总是在一段固定的时间后发生,有时需要几秒钟,有时会立即发生。我不相信该对象被删除,因为我已经将print语句添加到代理类的finalizer \ delete函数中。
感谢您的帮助。
答案 0 :(得分:1)
我发现了我的问题。我正在使用SWIG的std_vector实现。我在包装的std :: vector中返回数据,当向量超出Java端的范围时,垃圾收集器调用finalize方法,最终删除数据。基本上,我做了一个浅拷贝。添加复制构造函数可以解决问题。