【发布时间】:2011-09-24 22:16:32
【问题描述】:
我又回来了,脑子里一片混乱! :)
据我了解,armcc 通常的数据对齐方式如下(取自 ARM 网站) ARM Compiler toolchain Using the Compiler: Types of data alignment
但在我的二进制文件中,我看到 print_quality{} 结构实例位于 0x205B387
[D:0x205B387] print_quality = ((0x44, 0x72, 0x61, 0x66, 0x74, 0x0, 0x0, 0x0, 0
这里 sizeof(print_quality) = 0x1E
结构是 字符打印质量[][10] = { “草案”, “普通的”, “高的” };
在流程的后期,我在执行时遇到了崩溃
ldrh r2,[r1] ;这里r1=02064769
所以我猜它崩溃是因为从错误对齐的地址读取!?
怎么了!? :( 欢迎任何想法..
BR,
/MS
【问题讨论】:
-
您可以添加更多上下文吗?这里的信息不足以回答您的问题。例如,您的
print_quality结构是如何定义的?你提到的ldrh指令编译的C代码是什么? -
对不起!崩溃可能是由于不同的原因。但令我困惑的是 print_quality 位于奇怪的地址,尽管它的大小为 30 字节
-
ok Martin 添加了结构并得到了答案。它的字符结构!这可以证明住在奇怪的地址! :) 我们可以忽略 ldrh 的崩溃。我认为这是超出数组边界的指针。 c 行是 for ( ; *p != 0 ; ++p ) ;
-
请注意:您使用的“结构”一词的含义比它在 C 语言中的含义更广泛。您的
print_quality是一个数组,不是一个结构;在 C 中,结构是使用struct关键字定义的数据类型,仅此而已。