2010-06-20 3 views
0

특이한 문제가 있습니다. 다음 JNI 메서드를 호출 할 때.포인터를 변경하는 JNI 메소드

jobjectArray array = env->NewObjectArray(list->size, jclass, 0); 

이제 list->size는 54로 설정되어 그러나 즉시 코드로 위와 같은 포인터 반환을 실행, 2405015736는 세드릭? As는 나머지 구조체의 값에도 영향을 미칩니다. 고정 값 설정 : 즉

jobjectArray array = env->NewObjectArray(54, jclass, 0) 

또한 효과가 없습니다. 어떤 아이디어? 나는 혼란 스럽다.

(JCLASS가로드 된 클래스 개체입니다 jclass = env->FindClass("name");)

감사

+0

동일한 포인터입니까? 이게 무슨 뜻이야? 또한 proc_jclass 대신 jclass를 사용하십시오. –

+0

"list 구조체의 모든 것을 방해하는 이유는"'list-> size'가 이전에'jobjectArray array = env-> NewObjectArray (list-> size, jclass, 0)'가되기 전에 54 * 'list-> size'는'2405015736' * 뒤에 *? 그렇다면,'list'의 유형,'* list'을위한 공간 할당 방법,'* list' 초기화 방법을 게시 할 필요가 있다고 생각합니다. 거의'list'는 모든 종류의 문제를 일으킬 수있는 스택에 대한 포인터 인 것 같습니다. –

+0

작성되었습니다. list_struct * list; 그리고 나서 list_create (list); 해당 목록 포인터를 가져 와서 구조체를 변경하기 위해 호출됩니다. –

답변

0

귀하의 문제는 변환이 수행해야하므로 그 크기가 'jsize'유형하지 않을 수 있습니다. 자,이 모든 것이 잘되고 좋을 것이지만, JNI는이 재료로 절대적인 고통입니다. 무슨 일이 일어나고있는 것 같아요 당신의 스택이 너무 큰 것으로 해석됩니다 숫자에서 손상되고있다. 아니면 그런 식으로. 다음과 같이 크기 변환을 수행하십시오.

트릭을 수행해야합니다.

+0

그게 흥미 롭지 만 목록 구조체의 모든 것을 방해하는 이유는 무엇입니까? –

+0

스택 손상 :) 크기 변수 문제로 인해 할당량이 사용 가능한 메모리를 모두 차지하게되었습니다. 그것이 효과가 있다면 대답으로 받아 들여주세요! : D 또한 함수에서 숫자를 반환하는 경우 비슷한 것을 수행하고 중간 홀더를 사용해야합니다! JNI는 정말 고통 스럽다. :) –

+0

사실, 왜 그렇게 작동하는지, 어쩌면 스택 손상이 아닌지 잘 모르겠다. 아마도 다른 사람들이 문제에 대해 더 많은 것을 밝힐 수 있습니까? 어쩌면 그것은 덤프 포인터 대신 힙 손상을 일으킬 수 있습니다. –