EXC_BAD_ACCESS协议缓冲区代码中
EXC_BAD_ACCESS in protocol buffer code
我有这种情况:
a) 为 iOS 创建的静态库,使用从 protobuf 消息文件生成的协议缓冲区类。此静态库用于应用程序 (A)
b)protobuff 消息有一堆 setter 和 allocated_setters,都是 c++ 代码
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。
我正在尝试的iPhone是iPhone 5和iOS 8.2(测试版)
然而,EXC_BAD_ACCESS与记忆有关,
a) 为什么当相同的代码作为项目依赖项而不是静态库包含在类似的应用程序时,它适用于类似的应用程序。b) 有没有办法调试和确定正在发生的事情?我尝试启用僵尸,但无济于事。
看起来 ::google::p rotobuf::internal::kEmptyString 是一个变量,它存在于静态库和应用程序中,具有不同的值。因此,如果您的公司名称32chars等于其中一个的地址,而不是另一个的地址,则无法识别。如果变量是在静态库代码中设置的,但通过应用程序代码中的内联进行检查,则始终会发生这种情况。
相关文章:
- C++字符*缓冲区的大小
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- openCL-创建子缓冲区返回错误代码13
- 堆缓冲区溢出随机发生。对于一个简单的代码?(我是C++新手)
- 为什么此代码不会导致缓冲区溢出
- 缓冲区溢出的外壳代码如何生成
- 如何从协议缓冲区 .NET 代码生成 .proto 文件
- 0x00363A09处出现未处理的异常,堆栈cookie检测代码检测到基于堆栈的缓冲区溢出
- 协议缓冲区 GetRepeatedField (反射) 代码优化
- EXC_BAD_ACCESS协议缓冲区代码中
- 字符串缓冲区如何导致运行恶意代码
- 如何将STX/ETX(C0控制代码)写入BSTR缓冲区IXMLDOMElement*
- 如何清除代码块中的缓冲区
- 简单的程序集代码会产生缓冲区溢出
- 为什么在Visual Studio 2012上的代码分析中,此代码会发出缓冲区溢出警告(C6385/C6386)
- 如何执行从char*缓冲区加载到内存中的代码
- 这段代码中发生了什么?(执行一个字符缓冲区)
- 我如何提高我的环形缓冲区代码的性能
- 在汇编代码中查找不必要的缓冲区副本