簡體   English   中英

空指針投射錯誤?

[英]Void Pointer Cast Error?

我在我的C程序中使用空指針。 我有一個if語句,它強制將數據集打印到32字節邊界。

**我應該注意,我正在嘗試修改mem指針的地址以將其移至邊界**

我收到以下錯誤消息:

Operation between types "void*" and "int" is not allowed

我的代碼如下:

if(((int)mem % 32) != 0)   
    mem -= ((int)mem % 32);

其中mem定義為:

void *mem

像這樣:

void * mem;                   // input

char * p = mem;               // byte-wise arithmetic
uintptr_t n = (uintptr_t) p;  // integral arithmetic

p -= n % 32                   // align

mem = p;                      // output

請注意,這個假設地址之前內存mem到已經分配點,也是你的。

您當然可以將代碼壓縮為單個語句:

mem = (char *) mem - ((uintptr_t) mem % 32);

注意指針轉換通常是實現定義的。 沒有標准的方法可以推斷“對齊”,並且從指針獲得的整數值可能與硬件中的內存布局無關,也可能無關。

您不能使用void *來執行指針算術:

mem -= ((int)mem % 32);

未定義,因為*mem沒有“內在大小”。

可能會有編譯器(您好, gcc !)允許它作為擴展,但是通常,您只能對具有大小的類型的指針(例如char *int *等)進行指針算術。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM