これは奇妙に聞こえるかもしれませんが、私は過去2日間このバグに苦しんでいます。
ブールジェネレータ
boolean
を使用して初期化されたJavaの配列があります。Random
その後、
boolean
配列はCの関数(JNIを使用して呼び出されます)によって処理され、変更されたboolean
配列はjavaに返されます。配列をCに渡すboolean
と、unsigned charに変換されjbooleanArray
、Javaに戻される前にに変換されます。ここで、次のコードを実行します(iにはforループがあります)。
if(chosen_packet[i] == false) { pkt.first[i] = 0; System.out.print(chosen_packet[i]); } if(chosen_packet[i] == true) { pkt.first[i] = 1; System.out.print(chosen_packet[i]); }
問題は、それでも2番目の条件に入らない場合chosen_packet[i]
があることです。これは時々起こり、時々コードはうまく機能します。このような場合に印刷すると、まだ印刷されており、2番目の条件にはなりません。このように見えるアレイの破損の考えられる理由は何でしょうか?true
if
chosen_packet[i]
true
if
boolean
編集:これは私がCでboolean
配列を変換する方法です:unsigned char
jboolean *element = (*env)->GetBooleanArrayElements(env,chosen_packet,0);
for(j = 0; j < sz; j++)
src_pkt[j] = (unsigned char)element[j];
このsrc_pktが実行されてから、に変換し直しjboolean
ます。
EDIT2:これは私がunsignedchar配列をjbooleanに戻す方法です:
jbooleanArray arr = (*env)->NewBooleanArray(env,sz);
(*env)->SetBooleanArrayRegion(env,arr,0,sz,src_pkts);
(*env)->DeleteLocalRef(env,arr);