分割错误调用SWIG生成Getter
Segmentation Fault calling SWIG Generated Getter
我正在使用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.
}
}
我知道这可能是模糊的,但我不能发布确切的代码。就像我说的,这是一个奇怪的问题,因为它并不总是在固定的时间后发生,有时需要几秒钟,有时会立即发生。我不认为对象正在被删除,因为我在代理类的终结器delete函数中添加了print语句。
感谢您的帮助
我找到我的问题了。我正在使用SWIG的std_vector实现。我在封装的std::vector中返回数据,当vector超出Java端的作用域时,垃圾收集器调用finalize方法,最终删除数据。基本上,我做了一个肤浅的复制。添加复制构造函数修复了这个问题。
相关文章:
- 我在c++代码中生成了一个运行时#3异常
- Cppcheck生成xml转储文件
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- 如何在C++中使用结构生成映射
- 使用 C/C++ 宏生成函数签名
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何从具有移动语义的类对象中生成共享指针
- 如何通过 getter 函数删除矢量的元素?
- 生成文件不对文件使用隐式规则
- boost::asio如何生成多个协同程序,然后加入它们
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 生成MRPT库时cmake配置失败
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 如何处理使用.ui文件生成的.h文件
- 生成的 getter 和 setter 代码格式
- 具有多行字符串宏观的Getter/Setter生成
- 如何生成setter和getter,并使用C++预处理器定义Q_PROPERTY()
- 分割错误调用SWIG生成Getter