Error 처리: Invalid arguments'Candidates are: void * memcpy (void * const void *?)

2274 단어
Error 처리: Invalid arguments'Candidates are: void * memcpy (void *, const void *,?)
Error 처리: Invalid arguments'Candidates are: void * memcpy (void *, const void *,?)
JNI 개발 과정에서 발생한 문제
현상은 다음과 같습니다.
Invalid arguments ' Candidates are: void * memcpy(void *, const void *, ?)
Invalid arguments 'Candidates are: void * malloc(?)

포함된 헤더 파일에서도 함수의 원형을 다음과 같이 볼 수 있습니다.
extern __mallocfunc void*  malloc(size_t);
extern void*  memcpy(void *, const void *, size_t);

오류 프롬프트: Invalid arguments, 매개 변수가 잘못되었음을 의미합니다.size_이 매개 변수는 정상적으로 식별되지 않아서 생긴 것이다.
이 분석에서 비롯된 것이라면 무릇size_t 형식 매개 변수의 방법은 모두 이 문제가 발생할 수 있습니다. 예를 들어resizememset,memccpy,memchr,memcmp 등입니다.
이를 감안하여 이 문제를 해결하려면 두 가지가 있다. 첫째, 다른 방법으로 대체하고memcpy,malloc,memset 방법을 사용하지 않는다.둘째: 시스템이 size_를 정상적으로 인식할 수 있도록 하기t 유형, 이것은 이 문제를 근본적으로 해결하는 길이다.다음은 두 가지 사고방식에 대해 각각 상세한 해결 방안을 제공한다.
첫째: 대체법
malloc,memcpy 대신 new,strcpy를 사용할 수 있습니다.여기에서malloc,memcpy 두 가지 방법을 대상으로 다른 방법은 스스로 해당하는 방법을 찾아 대체할 수 있다.
예:
원래:
 const char* tmp = env->GetStringUTFChars(jstr_mac,NULL);  size_t len= strlen(tmp)+ 1;
 char*mac = (char*) malloc(len);  memcpy(mac, tmp, len);
 
다음으로 변경할 수 있습니다.
 const char* tmp = env->GetStringUTFChars(jstr_mac,NULL);  int len= strlen(tmp)+ 1;  char*mac = new char[len];  strcpy(mac, tmp);
둘째: 시스템이size_t 유형
시나리오는 다음과 같습니다.
프로젝트 공사properties-> C/C++General -> Paths and Symbols..
Includes 탭을 선택합니다
F:\android-ndk-r9b\platforms\android-19\arch-arm\usr\include
F:\android-ndk-r9b\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\lib\gcc\arm-linux-androideabi\4.8\include
주로 이 문장입니다. 왜냐하면 Opencv 튜토리얼 설정에 원래 이런 문장이 추가되지 않았기 때문입니다.
이렇게 하면 이 문제는 풀 수 있다.
참고 사항:
프로젝트의 include에 다음 두 개의 헤더 파일 라이브러리를 추가할 수도 있습니다.
F:\android-ndk-r9b\sources\cxx-stl\gnu-libstdc++\4.8\include
F:\android-ndk-r9b\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include

좋은 웹페이지 즐겨찾기