首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >协议缓冲区代码中的EXC_BAD_ACCESS

问协议缓冲区代码中的EXC_BAD_ACCESS
EN

Stack Overflow用户
提问于 2015-01-27 21:08:23
回答 1查看 235关注 0票数 0

我有这样的场景:

a)为iOS创建的静态库,并使用从protobuf消息文件生成的协议缓冲区类。此静态库在应用程序(A)中使用

B) protobuff消息有一堆setter和allocated_setters,都是c++代码

c)应用程序(C),它依赖于创建静态库的项目。

正在发生的事情:

当静态库包含在应用程序(A)中并且应用程序运行时,我在协议缓冲区类的一个基本设置器中获得了一个EXC_BAD_ACCESS。

代码语言:javascript
复制
    inline void ABCD::set_companyname32chars(const char* value) {
  set_has_companyname32chars();
  if (companyname32chars_ == &::google::protobuf::internal::kEmptyString) {
    companyname32chars_ = new ::std::string;
  }
  companyname32chars_->assign(value);
}

最后一行

代码语言:javascript
复制
companyname32chars_->assign(value) 

生成EXC_BAD_ACCESS。我使用这个setter的方法是这样的:

代码语言:javascript
复制
ABCD* abcd = new ABCD();
abcd->set_companyname32chars("Andes");

关键是,同样的代码在同一部手机上的应用程序C上运行得很好。

静态库是用以下切片创建的: armv7、armv7s和arm64。

我正在试用的iPhone是iPhone 5和iOS 8.2(测试版)

然而,EXC_BAD_ACCESS与内存有关,

a)当相同的代码作为项目依赖项而不是静态库包含在类似的应用程序中时,为什么它可以与类似的应用程序一起工作?b)有没有一种方法可以调试并查明到底是怎么回事?我试过启用僵尸,但没有用。

EN

回答 1

Stack Overflow用户

发布于 2015-01-27 21:18:56

似乎::google::protobuf::internal::kEmptyString是一个变量,它同时存在于您的静态库和应用程序中,具有不同的值。因此,如果您的companyname32chars等于其中一个的地址,但不等于另一个的地址,这是无法识别的。如果变量是在静态库代码中设置的,但通过应用程序代码中的内联进行检查,则总是会发生这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28171311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档