首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针指向奇数地址的有关问题

2012-02-07 
指针指向奇数地址的问题指向奇数地址的指针强制类型转换到short*时出现exception,非法指针。但用结构就不会

指针指向奇数地址的问题
指向奇数地址的指针强制类型转换到short   *时出现exception,非法指针。但用结构就不会。
为什么?

例如:
struct   ss
{
        short   sss;
}   __attribute__((packed));
char   *pch;
short   s;

pch   =   POSITION;   //任意奇数地址,比如一个string中间
s   =   *(short   *)pch;   //这样执行就出错
s   =   ((struct   ss   *)pch)-> sss;   //这样就可以

为什么呢?


[解决办法]
看访问的方式。

内存对齐就是为了防止类似的问题
[解决办法]
编译器一定对pch-> ssh作了对齐处理
[解决办法]
首先你需要了解这个MIPS硬件支持非对齐访问不
如果支持没有必要再深究了

如果不支持 看是否有替代的配置使其软件层面来解决奇地址访问的问题
比如像arm下packed保留字段只类

如果也没有那么看其汇编是否将奇地址的数据访问打散成字节访问形式再组装

如果不是那这个编译器是一泡屎

热点排行