我在使用以下代码时遇到了一些麻烦,这些代码似乎在指定的行中导致了分段错误。我正在尝试创建一个8位无符号整数数组,以便实例化一个OpenCV Mat对象,但是段填充发生在填充数组的循环的中途。
它似乎每次都发生在不同的迭代,导致我怀疑某些东西被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的长度。
有什么建议吗?
答案 0 :(得分:0)
通过在Android模拟器上重启我的AVD来管理解决此问题。问题似乎也不会发生在真实设备上,所以我只能得出结论,虚拟设备的RAM中出现了爆炸。