Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 诊断OS X Yosemite上的SIGBUS错误_C++_C_Osx Yosemite_Sigbus - Fatal编程技术网

C++ 诊断OS X Yosemite上的SIGBUS错误

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

我试图将一些代码转换为在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 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;