分段故障调用SWIG生成的Getter

时间:2014-05-28 18:54:11

标签: java c++ java-native-interface segmentation-fault swig

我正在使用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函数中。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我发现了我的问题。我正在使用SWIG的std_vector实现。我在包装的std :: vector中返回数据,当向量超出Java端的范围时,垃圾收集器调用finalize方法,最终删除数据。基本上,我做了一个浅拷贝。添加复制构造函数可以解决问题。