从不兼容的指针类型分配

时间:2013-12-19 11:01:49

标签: c linux unix

我不确定为什么会发生这种情况,我认为我正在做的一切正确。也许有人可以帮我指出正确的方向。

    unsigned short* x;

    int textLeft[16];

    x = shm->textLeft;

这些在程序中间隔开,所以我不想复制一堆代码,但如果需要更多代码,请告诉我。

如果不给我不兼容的指针类型,这不能正常工作吗?

3 个答案:

答案 0 :(得分:2)

不,这不起作用,因为您要为int*变量分配unsigned short*值,这会导致每个C strict aliasing rule的未定义行为。

在不改变类型的情况下完成这项工作的方法是

  1. 投射指针x = (unsigned short *)(shm->textLeft);
  2. 使用GCC的-fno-strict-aliasing进行编译,以关闭别名规则。
  3. 但实际上,我强烈建议您更改要兼容的类型,否则您将自己绑定到单个编译器对C标准的扩展。

答案 1 :(得分:1)

`unsigned short`

不是

`int`

所以定义

  • xint *
  • textLeft[16]unsigned short

事情还可以。

答案 2 :(得分:1)

在您的情况下,x是无符号短指针,textLeft是有符号整数。您正在尝试将带符号的整数地址分配给无符号短指针。