關於c語言的malloc 0xffffffff 的乙個問題???

時間 2021-06-01 18:48:53

1樓:千年放浪

如 @李洋 所說,我在64位機上看到的語法樹解析完的結果如下:sizeof (size_t)是8。

-1其實轉換成了-1ull。

2樓:

malloc的引數是無符號整數size_t型別,所以你用0xffffffff做引數,就會預設是正整數,而-1做引數,就會導致錯誤。

還有,malloc返回值要顯式轉化,不能直接賦值。改成pc = (char *)malloc(引數)。

3樓:Leon

malloc的引數是size_t,這個可不一定是unsigned int,所以-1跟0xffffffff可不一定等價。

而且當你傳入乙個-1的時候,就會不知不覺進入C語言一大天坑之一:「隱式型別轉換」。

在很多的編譯器中,這種行為會導致編譯器報乙個Warnning,表示這個地方有潛在的出錯可能。

4樓:

「-1這個表示式」只在 32bit integer的編碼下等於0xffffffff

%u 輸出的是多少bit?

你malloc的那裡,-1轉成size_t又是多少bit?

c語言裡malloc的最優實現方式是什麼?

壓根不關心malloc critical path malloc free,非critical的你加鎖我都無所謂。其他情況我用go,python,nodejs. vibiu 讀過redis的原始碼會發現它自己實現了乙個zmalloc,允許使用google的tcmalloc和facebook的jema...

C語言,講通過指標引用多維陣列時,講到的a 0 與 (a 0)等價怎麼理解?

位址偏移有什麼難以理解的其實還有0 a a 0 a 0 奇怪的0 a 好像是在 c與指標的書裡有詳細說過 a如果是個陣列的話,單獨使用a這個識別符號代表a的首位址。然後如果是a 0 這樣的寫法,代表引用a陣列的下標為0的元素,也就是取a陣列第乙個元素的值。這個下標為0的元素的位址實際上跟整個陣列a的...

c語言指標二維陣列a中,a和a 0 的值不應該是一樣的嗎?為什麼會出現以下問題?

給你把各個型別的關係理清就懂了。首先說a,假設a是乙個5個元素的int陣列,那麼a的型別是int 5 是陣列型別,其元素為int,有5個元素長。然後關於a 1這個表示式,由於陣列型別本身是不可變的,也不可 1,但是c語言規定了一條規則,那就是陣列型別可以隱式轉換成其首元素的指標,結果型別是int i...