sách gpt4 ăn đã đi

So sánh các giá trị con trỏ trong câu lệnh if

In lại Tác giả: Walker 123 更新时间:2023-11-30 15:23:19 28 4
mua khóa gpt4 giày nike

4为什么这个 block 会抛出内存错误:

uint8_t buffer[ 8 ] = { 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 };

if ( *((uint32_t *)(&buffer[ 0 ])) == *((uint32_t *)(&buffer[ 4 ])) + 1 )
return TRUE;

当这个 block 起作用时:

uint8_t buffer[ 8 ] = { 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 };
uint32_t comp1 = *((uint32_t *)(&buffer[ 0 ]));
uint32_t comp2 = *((uint32_t *)(&buffer[ 4 ]));

if ( comp1 == comp2 + 1 )
return TRUE;

câu trả lời hay nhất

问题可能来自缓冲区的对齐。由于您的缓冲区被声明为 uint8_t[],编译器不一定会对齐它。

这通常不是问题(但通常会导致较小的性能损失),但某些体系结构拒绝访问未对齐的指针。在这些架构上,非对齐访问必须在软件中完成。

这里我假设你的 HardFaultException 来自 ARM,并且 this link建议使用 __packed 属性让编译器知道指针可能未对齐。然后编译器将使用软件未对齐访问。

值得注意的是,现代 ARM 不再有这个问题。该链接谈论“旧版 ARM 处理器”,我没有注意到现代 ARM 上的这个问题。

关于比较 if 语句中的指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28856021/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress