我在以下代码中遇到了一些问题,这些代码似乎导致了指定行的分段错误。我正在尝试创建一个 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的长度。
有什么建议么?