我寫了一些分配內存的數組代碼,並且數組中的每個值都是一個類型。然後我有另一個數組,其中包含第一個數組的引用。Realloc創建懸掛指針?
這兩個數組都可以增長。它使用realloc。因爲第二個數組包含指向第一個的指針,所以當第一個數組更改時(我不手動執行並且沒有GC),它們肯定不會更新。當然,第二個數組中的所有指針都是無效的! (它們指向被realloc釋放的內存)。
這樣的情況是正確的嗎?
這似乎會使持久性指針指向可能移動非常危險的內存塊。
什麼是標準解決方案?不要使用「全局」指針?使用指針指向指針?我想我可以使第二個數組使用**,並可能可以使事情發揮作用。
在MT環境中,情況更糟。本地指針訪問可能會在中間移動,然後內存改變,並且本地指針現在是錯誤的。 (當然可以通過防止鎖等移動來解決...)
使用函數式編程?
1.我覺得你有與數據結構的問題。 2.你爲什麼使用指針?也許智能指針。 –
然後不要存儲指向第一個數組的指針。存儲索引。如果您的第一個數組只保持增長,這些將保持有效。 – PSkocik
@PSkocik是的,但這並不總是解決方案。這在這種情況下起作用,因爲我使用了一個可索引數組。它沒有回答這個問題,只是試圖提供一個特定的解決方案(我已經做了一個解決方案,當我第一次寫代碼時,這是我最初的反應。但是我喜歡「嘿,int和void *佔用了同樣的空間,爲什麼不使用指針!」 ......然後很快意識到這是一個壞主意。 – AbstractDissonance