2

示された行でセグメンテーション違反を引き起こしているように見える次のコードで少し問題が発生しています。OpenCV Matオブジェクトをインスタンス化するために、8ビットの符号なし整数の配列を作成しようとしていますが、配列にデータを入力するループの途中でセグメンテーション違反が発生します。

毎回異なる反復で発生しているように見え、GCによって何かが割り当て解除されているのではないかと思われますが、何を判断できません。

SignDetector.c

JNIEXPORT void JNICALL Java_org_xxx_detectBlobs(JNIEnv *env, jclass clazz, jintArray in)
{
    jint *contents = (*env)->GetIntArrayElements(env, in, NULL);

    threshold(contents, PIXEL_SAMPLE_RATE);
    detectBlobs(contents);

    (*env)->ReleaseIntArrayElements(env, in, contents, 0);
}

BlobDetector.cpp

void detectBlobs(jint *contents)
{
    LOGD("Call to detectBlobs in BlobDetector.cpp");

    uint8_t *thresholded = (uint8_t*) malloc(frame_size);

    int i;
    for(i = 0; i < frame_size - 1; i++)
        thresholded[i] = (contents[i] == WHITE) ? 0 : 1; // Segfaults partway through this loop.

frame_sizeは、単に画像のピクセル数であり、画像がネイティブコードに渡されるjintArrayの長さと同じです。

助言がありますか?

4

1 に答える 1

0

AndroidエミュレーターでAVDを再起動するだけで、これを解決できました。実際のデバイスでも問題は発生していないように見えるので、仮想デバイスのRAMで何かが爆発したと結論付けることしかできません。

于 2012-07-31T12:51:50.650 に答える