이 시나리오는 다음과 같습니다.프로토콜 버퍼 코드의 EXC_BAD_ACCESS
a) protobuf 메시지 파일에서 생성 된 프로토콜 버퍼 클래스를 사용하는 정적 라이브러리입니다. 이 정적 라이브러리는 프로젝트 의존성이있는 응용 프로그램 (A)
나) protobuff 메시지는 모든 C를 족 및 allocated_setters 다발을 갖는다 ++ 코드
c)는 응용 프로그램 (C)에 사용되는 정적 라이브러리를 만듭니다. 무슨 일이 일어나고 무엇
는 :
정적 라이브러리는 응용 프로그램 (A)에 포함되어앱이 실행되고, 내가 프로토콜 버퍼 클래스의 기본 세터 중 하나에 EXC_BAD_ACCESS 얻을.
inline void ABCD::set_companyname32chars(const char* value) {
set_has_companyname32chars();
if (companyname32chars_ == &::google::protobuf::internal::kEmptyString) {
companyname32chars_ = new ::std::string;
}
companyname32chars_->assign(value);
}
마지막 행
companyname32chars_->assign(value)
는 EXC_BAD_ACCESS를 생성한다. 나는이 세터를 사용하고 방법은 다음과 같이이다 :
ABCD* abcd = new ABCD();
abcd->set_companyname32chars("Andes");
키커는, 동일한 코드가 같은 전화에 응용 프로그램 C에 잘 실행됩니다.
정적 라이브러리는 다음 슬라이스, armv7, armv7s 및 arm64로 생성됩니다. 나는에 노력하고있어
아이폰은 아이폰 5와 아이폰 OS 8.2 (베타)
EXC_BAD_ACCESS 그러나, 메모리 함께 할 수있는 뭔가가있다
A) 동일한 코드가 비슷한 작동 않는 이유 응용 프로그램이 정적 라이브러리가 아닌 프로젝트 종속성으로 포함 된 경우 b) 디버깅 할 수있는 방법이 있습니까? 나는 좀비를 가능하게했지만 아무 소용이 없다.
의견을 보내 주셔서 감사합니다. setter ABCD * abcd = new ABCD(); abcd-> set_companyname32chars ("Andes"); 에서 정적 라이브러리에서 호출됩니다. 라이브러리에 대한 단 하나의 인터페이스는 하나의 API, OpenFile (NSString * filePath)입니다. 정적 링크 된 라이브러리 이외의 다른 참조 set_companyname32chars가 없습니다. – zyzzyxx