簡體   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