0

一部のコードを OS X で実行するように変換しようとしていますが、一部の低レベル メモリ書き込みコード (Linux/Windows プラットフォームで動作) に問題があります。

具体的には、呼び出されるメソッドは次のとおりです。

void Dset_mem_write_i1B(void* ptr,int val) {
  unsigned char* p=(unsigned char*)ptr;
  *p=(val)&0xFF;
}

関連するテスト コード (GTest) は次のとおりです。

TEST(DsetMemIoTest, test_write) {
  const char mem[4] = "";
  void* vmem = (void*)mem;
  int mem_read = 0;
  int to_write = 0;

  to_write = 'a';
  Dset_mem_write_i1B(vmem, to_write);
  mem_read = Dset_mem_read_i1B(vmem);
  EXPECT_EQ('a', (char)mem_read);

gdb (homebrew を使用してインストール) で実行すると、次のようになります。

Program received signal SIGBUS, Bus error.
0x0000000100009213 in Dset_mem_write_i1B (ptr=0x100054c95 <DsetMemIoTest_test_write_Test::TestBody()::mem>, val=97) at ...
78        *p=(val)&0xFF;

違いがないように見える明示的なキャストを追加しようとしました。

OS Xでこれが失敗する理由についての手がかりが見つかりません。これを診断する方法についての助けをいただければ幸いです。

4

0 に答える 0