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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.