gpt4 book ai didi

java - 调用 SWIG 生成的 Getter 的段错误

转载 作者:行者123 更新时间:2023-11-28 06:51:13 25 4
gpt4 key购买 nike

我正在使用 SWIG 包装一组用 C++ 编写的内部库,以提供对 Java API 的访问,直到现在我还没有遇到任何问题。

我有一个结构,它被包装到一个 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.
}
}

我知道这可能含糊不清,但我无法发布确切的代码。就像我说的,这是一个奇怪的问题,因为它并不总是在固定的时间后发生,有时需要几秒钟,有时会立即发生。我不相信该对象正在被删除,因为我已经在代理类的终结器\删除函数中添加了打印语句。

感谢您的帮助。

最佳答案

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

关于java - 调用 SWIG 生成的 Getter 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919666/

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