繁体   English   中英

警告:C 中不兼容的指针类型 [-Wincompatible-pointer-types]

[英]warning: incompatible pointer types [-Wincompatible-pointer-types] in C

为什么我会在这里收到警告? 我怎样才能解决这个问题?

memUnit * newUnit = (char*) freeUnit + sizeof(memUnit);

我想在我的 Memory (基本上是 DIY calloc())中的旧单元之后分配一个新单元。 所有带有Unit这个词的变量都是struct memUnit。

一切都像这样正常工作,但我该如何解决警告?

您正在尝试将char *分配给memUnit *

现在,我不知道memUnit在这种情况下是什么,但是如果它大于单字节值,那么您将字节对齐的指针分配给(更大的)对齐的指针,编译器有充分的理由抱怨。 我假设这就是问题所在。

如果freeUnit被声明为memUnit * ,则不需要转换指针类型。 只需使用:

memUnit *newUnit = freeUnit + 1; memUnit *newUnit = &freeUnit[1];

如果freeUnit是其他类型,尤其是具有不同大小/对齐方式的类型,那么您将处于危险之中

如果它是与memUnit大小完全相同的类型,并且您已检查它是否正确对齐,则可以将其强制转换为memUnit *并添加一个,如上所述。

没有从指向 char * 类型的指针到指向 object 类型的任何其他指针的隐式转换,除了类型 void *。

所以你需要写

memUnit * newUnit = ( memUnit * )( (char*) freeUnit + sizeof(memUnit) );

或者

memUnit * newUnit = ( void * )( (char*) freeUnit + sizeof(memUnit) );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM