malloc函式申請0位元組的問題

2021-06-25 23:07:45 字數 527 閱讀 2799

無意中看到這個問題。

malloc函式若申請0位元組,它返回的將會是什麼?會不會仍然是null?

在c語言深度剖析上看到這樣的解釋:申請0位元組的記憶體,函式並不返回null,而是返回乙個正常的記憶體位址。但是你卻無法使用這塊大小為0的記憶體,將此比喻成尺子上的某個刻度,說刻度本身並沒有長度,只有某兩個刻度一起才能量出長度。這個時候判斷語句:

if(p == null)將不會起作用!

本人在xcode上測試,確實如此,會得到乙個有效的位址!但是並不像作者所說的該指標不可用,指標仍然可用!(不知道原因,mark下)

然後本人又相繼測試了用malloc分配乙個負整數的位元組時,如malloc(-1)等,返回的是null指標,不可用!但是若用負的浮點數時,如malloc(-2.5)等,則返回有效指標,且可用。

這個問題本人不知道怎麼解決!

類似的還有:free(null),編譯不會有問題,但這個語句做了什麼?不知道!好比我們平時 malloc 乙個指標 p,然後free(p),且令 p = null;然後再次 free(p),這會發生什麼?不清楚

malloc分配0位元組的空間的秘密

面試的時候遇到這麼一道題,malloc分配0個位元組過後的記憶體情況?我回來用gcc測試了一下,以供參考 1 include 2 include 3 int main 4 root localhost on gcc o malloct malloct.c root localhost on mall...

解決ftp put 函式0位元組問題

今天修改原有的上傳程式,因為新增了一台伺服器,需要將上傳到web伺服器上之後,在ftp到伺服器,ftp程式很早前就寫過,還是比較簡單的,就是要注意一下服務是主動模式還是被動模式。自己修改好程式後,上傳卻出現檔案已經建立,但是大小為0位元組 用ftp軟體卻沒有問題 仔細想想許可權應該是沒有問題的,遂換...

TCP UDP 傳送 接收0位元組問題

再論 tcp udp 傳送 接收 0位元組問題 傳送時tcp建立連線時,3次握手的每個報文都是 data區為0 位元組,所以說傳送 0位元組沒有問題。建立連線後,再傳送 0位元組大小也沒有問題 api send 傳送後返回值為發包的大小 udp可以傳送 0位元組大小報文。api sendto,傳送後...