2012-07-30 23 views
2

我在以下代碼中遇到了一些問題,這些代碼似乎在指定的行上導致了段錯誤。我試圖創建一個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?

+0

當調用'detectBlobs'時,'frame_size'不保存正確的值。它當時甚至可能未初始化。使用全局變量的美妙之處在於,你永遠不知道在任何特定時間誰的腳在射擊。 – 2012-07-30 07:23:31

+2

這看起來像C89,而不是C++。 – Puppy 2012-07-30 07:25:13

+2

「GetIntArrayElements」的數組大小與「frame_size」的大小相同嗎?嘗試調用'(* env) - > GetArrayLength(env,in);'並檢查大小。 – 2012-07-30 07:26:35

回答

0

通過在Android模擬器上重新啓動我的AVD來解決此問題。問題似乎在真實設備上也不會發生,所以我只能斷定虛擬設備的RAM中出現了爆炸。

+0

您可以在18小時內接受您自己的答案嗎?怎麼......令人沮喪。 – jlm47 2012-07-31 12:52:37

相關問題