簡體   English   中英

協議緩沖區代碼中的EXC_BAD_ACCESS

[英]EXC_BAD_ACCESS in protocol buffer code

我有這種情況:

a)為iOS創建的靜態庫,並使用從protobuf消息文件生成的協議緩沖區類。 此靜態庫用於應用程序(A)

b)probbuff消息具有一堆設置器和分配的設置器,所有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。 我使用此setter的方式如下:

ABCD* abcd = new ABCD();
abcd->set_companyname32chars("Andes");

更重要的是,相同的代碼可以在同一部手機的Application C上正常運行。

靜態庫是使用以下切片(armv7,armv7s和arm64)創建的。

我正在嘗試使用的iPhone是iPhone 5和iOS 8.2(測試版)

EXC_BAD_ACCESS與內存有關,但是,

a)當相同的代碼作為項目依賴項而不是靜態庫包含在內時,為什么相同的代碼可以與類似的應用程序一起使用? b)有沒有一種方法可以調試和發現正在發生的事情? 我嘗試啟用僵屍,但無濟於事。

:: google :: protobuf :: internal :: kEmptyString似乎是一個存在於您的靜態庫和應用程序中的變量,具有不同的值。 因此,如果companyname32chars等於其中一個的地址,但不等於另一個的地址,則無法識別該地址。 如果在靜態庫代碼中設置了變量,但始終通過在應用程序代碼中進行內聯檢查,則將始終發生這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM