2

我在以下代码中遇到了一些问题,这些代码似乎导致了指定行的分段错误。我正在尝试创建一个 8 位无符号整数数组以实例化 OpenCV Mat 对象,但是段错误发生在填充数组的循环的中途。

它似乎每次都发生在不同的迭代中,导致我怀疑某些东西正在被 GC 释放,但我无法确定是什么。

标志检测器.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);
}

斑点检测器.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 简单来说就是一张图片的像素数,也相当于图片传入native code的jintArray的长度。

有什么建议么?

4

1 回答 1

0

只需在 Android 模拟器上重新启动我的 AVD 即可解决此问题。问题似乎也不会出现在真实设备上,所以我只能得出结论,虚拟设备的 RAM 中发生了爆炸。

于 2012-07-31T12:51:50.650 回答