我在以下代碼中遇到了一些問題,這些代碼似乎在指定的行上導致了段錯誤。我試圖創建一個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的長度該圖像被傳遞給本地代碼英寸
任何suggestio NS?
當調用'detectBlobs'時,'frame_size'不保存正確的值。它當時甚至可能未初始化。使用全局變量的美妙之處在於,你永遠不知道在任何特定時間誰的腳在射擊。 – 2012-07-30 07:23:31
這看起來像C89,而不是C++。 – Puppy 2012-07-30 07:25:13
「GetIntArrayElements」的數組大小與「frame_size」的大小相同嗎?嘗試調用'(* env) - > GetArrayLength(env,in);'並檢查大小。 – 2012-07-30 07:26:35