我在我的bsm_create函數的不同位置調用了malloc函數,但在某些地方我得到了相同的內存地址。 malloc/calloc函數可以釋放某個位置並在linux(fedora)環境中再次分配該位置。當malloc函數分配相同的內存位置?
1
A
回答
4
當先前malloc()
(或其家庭)分配的緩衝區已經發布了free()
(或間接地在realloc()
呼叫釋放),它會被重用 - 這意味着你可以期望它在未來的分配返回。這就是你首先想要free()
的原因。
0
您沒有明確指出是否釋放了它們。正如其他人所說的,一個釋放的內存區域可以被重用,但是如果仍然被分配的話,你當然不會得到相同的地址。
但是,如果您重新分配(realloc()
和家庭)更高的大小它可以移動到其他地方,所以最初的地址可以/可以稍後重用,即使沒有釋放任何東西。
實施例:分配32 *的sizeof(int)的兩倍給出地址:0xeee010 0xeee0a0
重新分配所述第一一個64 *的sizeof(int)的引線到一個新的地址:0xeee130
然後分配一個其它32 *的sizeof(int)的1號地址掉落:0xeee010
+0
OP明確指出內存已被釋放,儘管英文有點破碎:_Can malloc/calloc函數釋放了一些位置,並再次分配該位置_ – mah
1
- 當malloc函數分配同一存儲器位置?
- 當您調用
malloc
函數時,您正在請求在堆中留出一些空間。如果請求的空間存在,malloc會給出分配空間的起始地址。我們稱之爲A。 A是分配空間的起始地址。 - 當我們在這個分配的空間上調用
free
時,我們正在請求釋放,所以現在這個返回的空間可以被運行時自由使用。因此,從位置A開始分配字節的內存將被釋放並返回到運行時。 - 所以,當有人問再次一些空間,有很大的可能性 (和概率!= 0),其起始地址從一些字節一個仍然是免費的,所以運行時可以給一個再次回來。
- 當您調用
希望它有幫助!
相關問題
- 1. Malloc分配相同的內存塊
- 2. malloc函數將所有數據分配到相同的內存地址
- 3. malloc內存分配
- 4. Malloc在內存中分配相同的地址?
- 5. malloc分配內存和SIGSEGV
- 6. 使用malloc()分配內存
- 7. malloc替代CUDA內核函數動態內存分配
- 8. 內存位置和分配
- 9. 使用的sizeof()的malloc分配內存
- 10. 的malloc分配內存的列表
- 11. C中的malloc內存分配方案
- 12. malloc觸摸未分配的內存
- 13. Ç - 的malloc分配太多內存
- 14. 當聲明向量時神祕的malloc內存分配錯誤
- 15. 從JNI調用的DLL獲取內存分配的位置,例如Malloc
- 16. 使用malloc分配動態內存
- 17. 使用malloc分配內存失敗
- 18. Malloc分配內存超過RAM
- 19. 使用malloc動態分配內存()
- 20. Malloc - >分配了多少內存?
- 21. 無法使用MALLOC分配內存
- 22. 內存分配閾值(mmap vs malloc)
- 23. malloc真正分配多少內存?
- 24. 分配malloc的內存不會在函數範圍外持久存儲嗎?
- 25. C函數分配內存
- 26. 使用malloc分配沒有分配的內存,怎麼樣?
- 27. 函數參數的內存位置
- 28. 更改malloc函數分配空間
- 29. C /用Cython:一個malloc的內存分配的初始內容
- 30. 成員函數的Java內存分配
地址釋放後,可以重新使用。爲什麼不? – Klaus
你爲什麼用「valgrind」標記你的問題?你認爲再次返回相同地址的'malloc'會對Valgrind造成問題嗎?它不會,因爲Valgrind用它自己的實現替換了'malloc',跟蹤當前分配的內容。 – 5gon12eder