我有一些 C++ 代码,当在 Xcode 上运行时,未定义的行为清理器打开了报告:“ runtime error: store to misaligned address 0x7f8bcc403771 for type 'int', which requires 4 byte alignment
”。
所以我创建了一个小的 Catch2 测试用例来重现我必须检查 windows/x64 (MSVC) 和 Mac(Xcode 11/clang) 上的运行时行为的代码,但即使使用不同类型的优化编译,一切都按预期运行( -O2、-O3、-Ofast 等)。
有问题的代码是(Catch2 测试用例):
TEST_CASE("misaligned_write", "[demo]") {
unsigned char *data = (unsigned char*)malloc(20);
memset(data, 0, 20);
int *ptr = reinterpret_cast<int*>(&data[1]);
*ptr = 0x11223344; // undefined behaviour triggered
CHECK(static_cast<uint8_t>(data[1]) == 0x44);
CHECK(static_cast<uint8_t>(data[2]) == 0x33);
CHECK(static_cast<uint8_t>(data[3]) == 0x22);
CHECK(static_cast<uint8_t>(data[4]) == 0x11);
}
所以我的问题是:这是一个未定义的行为误报,还是由于默认编译器标志的一些更改,代码中的某些内容将来可能会中断?