未定义的行为或误报
Undefined behaviour or false positive
本文关键字:未定义 更新时间:2023-10-16
我有一些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);
}
所以我的问题是:这是一种未定义的行为误报,还是由于默认编译器标志的某些更改,代码中的某些内容将来可能会中断?
malloc()
将始终返回一个指针,该指针针对任何可能的数据类型适当对齐。&data[1]
是指向第二个字节的指针,对于具有对齐要求的任何数据类型,显然没有正确对齐> 1
.如果要在错误分配内存的前四个字节中有一个指针,请使用&data[0]
或&data
。
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 对 Scalar ::Scalar() 的未定义引用