私はJavaJNIを使用して、使用しているフレームワークにZ3SolverC-Apiを統合しています。今、私は次のメッセージでセグメンテーション違反を起こしている-
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x664c4af0, pid=10878, tid=3060636480
#
# JRE version: 7.0_09-b30
# Java VM: OpenJDK Server VM (23.2-b09 mixed mode linux-x86 )
# Problematic frame:
# C [libSpdfZ3.so+0x634af0] small_object_allocator::allocate(unsigned int)+0x40
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/rajtendulkar/workspace/Java-WorkSpace/spdf-compiler_with_Yices_and_Z3_StaticLib/hs_err_pid10878.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
# https://bugs.launchpad.net/ubuntu/+source/openjdk-7/
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
ログファイル内では、Z3のコンテキストが割り当てられている1つの呼び出しを指します。基本的には、メモリが割り当てられた初期化ルーチンです。
このセグメンテーション違反の原因を理解したいと思います。私のプログラムは一度実行すると正常に動作することを述べておきたいと思います。ただし、このようにforループで実行すると-
for (int i=0;i<5;i++)
{
// create z3 context
Z3Object obj = new Z3Object();
...
...
.. do some exploration here ..
...
...
...
}
これがメモリの割り当てやメモリの不足などと関係があるのかどうかを考えていますか?
これをデバッグする方法についてのポインタはありがたいです。
編集 :
コードをデバッグしてゆっくりと進めようとすると、この問題は発生しません。同様に、forループの最後に5秒の遅延を設定すると、セグメントが取得されません。障害。それで、それは並行性の問題と関連している可能性がありますか?