Memory
Unison OS 對引用的空指針、索引越界訪問(不寫入)和未初始化變數的使用做了什麼?
我正在嘗試確定特定的給定 C 語言原始碼是否在我擁有的Unison OS上執行可能會導致崩潰,以及通過哪些向量。程式碼的某些部分有時會嘗試取消引用空指針,訪問但不寫入越界的數組索引,並使用可能未初始化的變數。
這種行為是未定義的,因此在 C 中是不可預測的,但根據我讀過的其他討論,作業系統和/或 CPU 在這些情況下將具有預設行為。
我不擁有有問題的程式碼,也不想修復它。我只是想從高層次上了解這些(以及哪些)是否有合理的可能性導致程序崩潰。
我將嘗試解決您的每種情況;我不是 Unison OS 的專家。
嘗試取消引用空指針
如果程序取消引用 NULL 指針,則程序應該收到一個
SIGSEGV
.訪問但不寫入數組索引越界
這取決於程序是否可以讀取結果地址。只要結果地址對於讀取是“有效的”,讀取該值的嘗試將在給定地址獲取適當數量的字節。如果它從數組的末尾“足夠遠”,到達地址不再有效的地步,那麼該程序應該收到一個
SIGSEGV
.使用可能未初始化的變數
從記憶體中讀取字節會返回最後儲存在這些字節中的值。如果您的程序有一個未初始化的堆棧分配變數,然後嘗試讀取該變數,它將獲得最後寫入這些字節的任何內容。