C 如何调试由于“错误”导致的分段错误;跳转到无效地址";?

C 如何调试由于“错误”导致的分段错误;跳转到无效地址";?,c,pointers,memory-corruption,C,Pointers,Memory Corruption,我正在开发一个在am335x arm处理器上运行的应用程序。 我正在定义以下结构,其中包含指向“Command”函数的函数指针。“命令”功能在同一文件中定义如下 ObjectDef BPObjectDef = { CCR_COMMS, 1, ATTRIBUTES, "BP", Command }; static BYTE Command( ObjectPtr Obj, BYTE Command) { <not writing code because function is big>

我正在开发一个在am335x arm处理器上运行的应用程序。 我正在定义以下结构,其中包含指向“Command”函数的函数指针。“命令”功能在同一文件中定义如下

ObjectDef BPObjectDef = { CCR_COMMS, 1, ATTRIBUTES, "BP", Command };

static BYTE Command( ObjectPtr Obj, BYTE Command)
{
<not writing code because function is big>
}

但当我在目标机器上运行二进制文件时,我得到了“Command”函数的以下地址

我们可以看到,地址的最后两个字节与前两个字节交换。这会导致在访问此功能时出现分段故障。
以前有人遇到过类似的问题吗?在这种情况下如何调试?我想我不能使用地址消毒剂,因为它是一个arm平台。谢谢你,你是天才!正如您在评论中提到的,由于结构填充,地址被更改。在结构声明之前使用#pragma pack(1)解决了这个问题。非常感谢你

你知道“持久性”的概念,不是吗?我不认为这是一个持久性问题。因为DuiNess告诉了一个多字节变量将如何存储在一个特定的内存地址中。请确定你考虑的最后两个字节和前两个字节。例如,如“前两个字节(0001),后两个字节(3f0d)”。并解释在您看来,交换它们是如何产生3f0d0000的。在我看来,0001丢失了,偏移量0000从3f0d的“另一边”使用,这可以解释为结构填充。请提供所有声明和定义,以及两个平台上的
sizeof()
结果。
00013f0d l     F .text  0000016c              Command

address of BPObjectDef.Command = 0x3f0d0000