我正在尝试将一些代码转换为在 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 中运行(使用自制软件安装)时,我得到:
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 上失败。任何有关如何诊断此问题的帮助将不胜感激。