C++ 诊断OS X Yosemite上的SIGBUS错误
我试图将一些代码转换为在OSX上运行,但在编写一些低级内存代码(在Linux/Windows平台上工作)时遇到了问题 具体而言,正在调用的方法是:C++ 诊断OS X Yosemite上的SIGBUS错误,c++,c,osx-yosemite,sigbus,C++,C,Osx Yosemite,Sigbus,我试图将一些代码转换为在OSX上运行,但在编写一些低级内存代码(在Linux/Windows平台上工作)时遇到了问题 具体而言,正在调用的方法是: void Dset_mem_write_i1B(void* ptr,int val) { unsigned char* p=(unsigned char*)ptr; *p=(val)&0xFF; } 相关测试代码(GTest)为: 在gdb(使用自制软件安装)中运行时,我得到: Program received signal SIG
void Dset_mem_write_i1B(void* ptr,int val) {
unsigned char* p=(unsigned char*)ptr;
*p=(val)&0xFF;
}
相关测试代码(GTest)为:
在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;
程序收到信号SIGBUS,总线错误。
0x0000000100009213位于以下位置的Dset_mem_write_i1B(ptr=0x100054c95,val=97)中。。。
78*p=(val)&0xFF;
我尝试添加显式类型转换,但似乎没有什么不同
我找不到任何线索来解释为什么这会在OS X上失败。任何关于如何诊断这一问题的帮助都将不胜感激。SIGBUS通常意味着指针没有与您通过它访问的值的大小正确对齐。尽管这在编写单个字符时没有意义,因为
char
没有对齐要求。问题是const char mem[4]
中的const
关键字。您正在将mem
声明为只读,然后尝试对其进行写入。由于您正在写入声明为const char
的mem
,因此在这种情况下,内存可能不可写入,而它可能在其他平台下?谢谢!这确实是问题所在。我在寻找指针对齐的问题,但它没有注意到内存被声明为const。有趣的是,它没有出现在其他平台上。
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;