Pointers SAMD21-指针取消引用时出现硬错误,调试器显示有效对象

Pointers SAMD21-指针取消引用时出现硬错误,调试器显示有效对象,pointers,microcontroller,atmel,Pointers,Microcontroller,Atmel,我在SAMD21板上的程序中遇到一个严重错误,当我访问指针的值时,该错误就会发生 iAP2Packet_t* iAP2LinkPacketForIndex (uint8_t* listArrayBuffer, uint8_t index) { iAP2Packet_t** pPck = (iAP2Packet_t**) iAP2ListArrayItemForIndex(listArrayBuffer, index); if (pPck) { iAP2Pa

我在SAMD21板上的程序中遇到一个严重错误,当我访问指针的值时,该错误就会发生

iAP2Packet_t* iAP2LinkPacketForIndex (uint8_t* listArrayBuffer, uint8_t index)
{
    iAP2Packet_t** pPck = (iAP2Packet_t**) iAP2ListArrayItemForIndex(listArrayBuffer, index);
    if (pPck)
    {
        iAP2Packet_t* pPckU = *pPck;
        return pPckU;
    }
    return NULL;
}
在调试器中,我可以看到pPck指向有效数据,因此我有点不知道如何进一步调试它。是否仍然可以查看导致硬故障的具体内存问题(指针超出边界、空ptr等)


我不清楚硬故障是何时发生的:如果在非调试模式下运行程序,是否会发生硬故障?如果是这样,你怎么知道这是你标记的那条线?或者,如果在所示的情况下再执行一行,会发生这种情况吗?使用指针/结构是相当不安全的。您在拆卸过程中检查了对齐情况吗?和/或禁用处理器中的对齐陷阱?如怀疑的那样,调试器屏幕截图确认未对齐的值,以红色突出显示
pPck
指向2字节对齐的值,但指针在32位机器上必须是4字节对齐的(它是一个。解决方法:将缓冲区中的字节复制到变量中,例如使用
memcpy
。谢谢@YannVernier,添加2个字节的保留对齐空间修复了此问题。您想将您的评论作为答案发布吗?