回答
malloc(3)
不能這樣工作。它在內存中分配固定大小的數據塊,在塊的開始處添加元數據(如下一個空閒塊的地址或塊的大小),並在元數據之後返回地址。
free(3)
需要包含在要執行的元數據信息(例如,以更新其鏈接列表中的空閒塊的地址。如果您提供的沒有被malloc(3)
分配的指針,元數據是不存在,free
是無法做到這一點。
出於這個原因,free(3)
手冊頁明確地禁止通過,並沒有被'的malloc分配的指針(3)
的
free()
函數釋放內存空間由ptr
,必須已返回由以前調用malloc()
,calloc()
,或realloc()
指出。否則,或者如果已經調用free(ptr)
之前已經調用了 ,則會發生未定義的行爲。如果ptr
是NULL
, 不執行操作。
否則可能導致未定義行爲,即,如果你的系統還沒有把一些防護措施是爲了防止你這樣做,可能會導致安全漏洞,因爲free(3)
將上的任意內存寫假元數據指向的區域。
謝謝,我現在明白了。 – W2a
然後請標記解決您的問題的答案! –
- 1. C++中的二維動態內存分配數組中的空閒分配內存
- 2. 內存分配器:避免空閒內存兩次
- 3. 負空閒內存
- 4. 在主機設備上分配的空閒內存
- 5. remove_if後的空閒內存
- 6. Java - FloatBuffers的空閒內存
- 7. 字節的空閒內存[]
- 8. 實現顯式空閒列表內存分配
- 9. C中的內存分配
- 10. C++中的內存分配
- 11. C++中的內存分配
- 12. 查詢空閒內存量
- 13. XML :: LibXML perl空閒內存
- 14. strlen和空閒內存
- 15. 函數中的空閒內存
- 16. 循環中的空閒內存
- 17. 內存分配C++
- 18. 內存分配,C++
- 19. C內存分配
- 20. C++分配內存
- 21. 內存分配C
- 22. C中的免費C分配內存#
- 23. 在C/C++中的內存分配
- 24. 在C++中用void *分配內存結構內存分配
- 25. C++內存分配在C
- 26. 如何分配動態內存並重新分配後,重新分配,我們如何把中間的空閒內存,以一個塊存儲
- 27. 將ImageBrush中的空閒內存設置爲WPF中的空格
- 28. 表單關閉時的空閒內存
- 29. iphone動畫之後的空閒內存
- 30. 查找最大的空閒內存塊
主要是因爲標準這麼說。出於更多技術原因,一些'malloc()'實現在分配的內存區域之前放置了簿記數據。除了指針'malloc()'以外的其他內容傳遞給'free()'會導致'free()'將垃圾數據解釋爲其簿記數據,並帶來致命後果。 – fuz
謝謝,我現在明白了。 – W2a