我不确定为什么会发生这种情况,我认为我正在做的一切正确。也许有人可以帮我指出正确的方向。
unsigned short* x;
int textLeft[16];
x = shm->textLeft;
这些在程序中间隔开,所以我不想复制一堆代码,但如果需要更多代码,请告诉我。
如果不给我不兼容的指针类型,这不能正常工作吗?
答案 0 :(得分:2)
不,这不起作用,因为您要为int*
变量分配unsigned short*
值,这会导致每个C strict aliasing rule的未定义行为。
在不改变类型的情况下完成这项工作的方法是
x = (unsigned short *)(shm->textLeft);
和-fno-strict-aliasing
进行编译,以关闭别名规则。但实际上,我强烈建议您更改要兼容的类型,否则您将自己绑定到单个编译器对C标准的扩展。
答案 1 :(得分:1)
`unsigned short`
不是
`int`
所以定义
x
为int *
或textLeft[16]
为unsigned short
事情还可以。
答案 2 :(得分:1)
在您的情况下,x
是无符号短指针,textLeft
是有符号整数。您正在尝试将带符号的整数地址分配给无符号短指针。