關於malloc 0 的對與錯

2021-10-07 11:14:32 字數 752 閱讀 4804

當malloc分配記憶體時它除了分配我們指定size的記憶體塊,還會分配額外的記憶體來儲存我們的記憶體塊資訊,用於維護該記憶體塊。

因此,malloc(0)返回乙個合法的指標並指向儲存記憶體塊資訊的額外記憶體,我們當然可以在該記憶體上進行讀寫操作,但是這樣做了會破壞該記憶體塊的維護資訊,因此當我們呼叫free(ptr)時就會出現錯誤。

*char ptr = (char )malloc(0sizeof(char)) ;

ptr是區域性指標變數,儲存在棧中,它的值是動態分配的一塊堆中的空間的首位址所以說這個位址是合法的,但是由於malloc的大小是0,故這個位址指向的堆中的儲存空間的大小是0。

這個指標類似於乙個野指標,可以使用的,但是是有風險的,因為不知道這個指標後面的記憶體空間被誰使用著,要是被核心程序使用,哪肯定會造成相應程式的崩潰關於加上free後,程式就會崩潰。

在vs中編譯出錯。

但是在qt中可以編譯成功,free沒有報錯。

關於malloc(0)的對與錯

大家都知道malloc 1 是錯的,但是malloc 0 到底是對還是錯呢?在以前我也沒有考慮過,只知道malloc 0 是沒有申請任何空間的,是沒法往裡面寫入東西的,但是我在linux上和window編譯時卻讓我出乎意料,它既然沒有報錯,可以輸入和輸出,看乙個例子大家就知道了 window上執行結...

關於malloc 0 的問題

該 的輸出是 got a valid pointer 不信的可以嘗試下!只給出答案,但沒給出具體的原理解答。下面我說一下關於這個題目的嘗試情況 正常在指標的引用時候,如果定義char str null 後如果不對其進行malloc的話,執行memcpy str,hello strlen hello ...

malloc 0 的執行實驗

碰到這樣的題目,問 malloc 0 有什麼後果和輸出,這裡來vs上進行執行試驗 我們在堆上申請一塊記憶體,若申請size為0,有很多文章已經進行了描述 參考1,參考2,參考3,參考4 char ptr,next char tmp1,tmp2,t 申請多個size為0的記憶體 tmp1 char m...