c++ - 使用 C 的 ARM9 上未对齐内存访问异常的解决方法是什么?

标签 c++ c embedded arm

架构 ARM9。编程语言 C.

我们有一个第三方堆栈,其中一个调用采用指向内存位置的指针 (pBuffer)。在堆栈中,他们可以自由地在传递的指针周围移动并随意访问它。不幸的是,他们偏移了传入的指针并将其传递给另一个函数,该函数试图从一个奇数/未验证的内存位置

         ((uint16 *)pBuffer)[index] = value;

其中 valueuint16 类型,index 是边界检查和索引 pBuffer。这会导致未对齐的内存访问异常。 pBuffer 指向堆上的char *

如前所述,即使我们可以窥视第三方堆栈,我们也无法正式更新代码。所以我们通知提供商,他们在下一个版本中提供更新。

我想了解是否有解决此问题的方法。如何在不违反未对齐访问的情况下执行上述分配?解决此类问题的最佳方法是什么。

最佳答案

逐字节复制值。将其转换为(无符号)字符指针,然后一次复制一个字节。

这不是很漂亮,但听起来您没有很多选择。

关于c++ - 使用 C 的 ARM9 上未对齐内存访问异常的解决方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673930/

相关文章:

c++ - 在c++中命名文件

C 错误 : undefined reference to '_itoa'

c++ - 如何在 C 中声明指向嵌套 C++ 类的指针

c - 二元运算是否比 memmove 更快?

c - stm32 WFI不触发

c++ - 使用 cv 限定符和 ref 限定符实现 std::is_function

c++ - 使用 QMap 存储对象时应用程序停止响应

C++运算过载,崩溃

c - 将数组传递给C语言中的排序函数

c - 启用 const 数组的部分