簡體   English   中英

如何在C ++中有意地保存和獲取懸空指針

[英]How to intentionally preserve and harvest a dangling pointer in C++

我正在編寫LLVM插件 在其中,我創建了一個全局指針數組,這些指針沿着程序中不同功能的流程獲取數據。 當指針在函數作用域中獲取地址時,可以合理地假設,一旦超出其作用域,就有可能在操作系統認為合適時覆​​蓋內存的內容。

我想知道是否有一種方法可以在程序的所有作用域 中使指針的內容不變(除非我發現自己需要更改它)。

我以為像volatile這樣的標志可以解決問題,但與非易失性指令相比,似乎所有這些操作都保留了其順序位置。

您很可能需要復制數據。

您實際上可以將內存標記為不可寫,這將不允許任何人對其進行寫操作。 但是,如果指針在堆棧上或已被釋放,則可能會產生不良后果(即,段錯誤,以及其中的很多錯誤。)此外,還必須按頁完成操作,例如,大塊操作。

請記住,如果釋放了指針,則指向的數據可以在以后由另一個函數重用。 即使我“承諾”不要修改指針所指向的數據,但一旦釋放它,所有賭注都將關閉。 其他人可能會分配相同的內存。

如果您需要在釋放數據后保留數據/數據超出范圍,則必須將其復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM