大家都知道malloc(-1)是錯的,但是malloc(0)到底是對還是錯呢?
在以前我也沒有考慮過,只知道malloc(0)是沒有申請任何空間的,是沒法往裡面寫入東西的,但是我在linux上和window編譯時卻讓我出乎意料,它既然沒有報錯,可以輸入和輸出,看乙個例子大家就知道了:
window上執行結果:
linux上執行結果:
我一直在想為什麼會能正確的輸入和輸出,是自己很苦惱,按道理說它是錯的,讓自己很苦惱
經過查詢資料終於明白了,原來
char* p = (char *) malloc (0);
**也能通過編譯,但事實上只分配了0個位元組大小的記憶體空間,當你往裡頭存入乙個整數,就會有
3個位元組無家可歸
,結果是後面的記憶體中原有資料內容被改寫。這樣做是很危險的。
這種錯誤也可以自己測試出來,雖然寫入動態空間,但是在釋放動態空間是沒法釋放的,因為free函式不能釋放別人的空間。
你們可以發現上面的程式申請動態記憶體後都沒有釋放,這樣才導致了錯誤的出現
正確**是:
總結:在寫**是申請了動態記憶體一定要及時釋放,否則會出現記憶體洩漏,雖然短時間內沒法發現,但是他是乙個潛在危險。
關於malloc 0 的對與錯
當malloc分配記憶體時它除了分配我們指定size的記憶體塊,還會分配額外的記憶體來儲存我們的記憶體塊資訊,用於維護該記憶體塊。因此,malloc 0 返回乙個合法的指標並指向儲存記憶體塊資訊的額外記憶體,我們當然可以在該記憶體上進行讀寫操作,但是這樣做了會破壞該記憶體塊的維護資訊,因此當我們呼叫...
關於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...