[英]warning: return from incompatible pointer type [-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.