它是否映射到內存中的零頁?如何在Linux系統上實現NULL指針?
2
A
回答
2
這是Linux的事實是無關緊要的。在C中,NULL常量被定義爲'0' - 零。當一個進程試圖在保護模式上下文中取消引用其值爲零的指針時,它會導致處理器引發中斷,然後由操作系統處理該中斷(然後通常傳遞給應用程序的框架,這就是.NET的原因。給你友好的NullReferenceExceptions但C給你更加神祕的錯誤)。
+0
所以如果你解除引用它,它會嘗試訪問虛擬地址空間中的零頁面? – Bruce
+1
在運行時,NULL指針的值不一定爲零。 'char * p = 0;'總是產生一個NULL指針,因爲你使用了一個整型文字。但'char * p; memset(&p,0,sizeof p);'在所有符合的實現上不產生NULL指針。此外,訪問違規是特定於實現的行爲 - 所有標準中關於解除引用不安全派生指針的說法是,您將獲得**未定義行爲**。最終,該平臺非常相關。 –
相關問題
- 1. NULL實現和指針分配
- 2. 如何在Linux/Android 2.6.29中查找系統調用實現?
- 3. 在現有系統上實現Homekit
- 4. sys_sendto Linux系統調用實現
- 5. 使用LKM實現Linux系統調用
- 6. 如何在Linux系統上運行liquibase
- 7. 在Linux上用FUSE實現異步文件系統
- 8. 如何使指針指針NULL
- 9. 實現指針
- 10. 如何在Prolog中實現指針?
- 11. NULL在Android中實現Touch Listener時出現指針異常
- 12. 系統調用在Linux上如何實際發生?
- 13. 如何實現類似於linux系統時鐘的c時鐘
- 14. 如何根據Linux系統調用實現過程的背景?
- 15. Android 4.4系統+ Parse.com指針
- 16. MASM指針實現
- 17. 實現指南針
- 18. 在嵌入式系統上投射指針,通過指針投射在32位變量上的字節指針
- 19. 通常在Linux系統上實現的POSIX c99實用程序是什麼?
- 20. 如何在iOS的工具欄上實現指針箭頭?
- 21. 如何在雙鏈表的指針上實現快速排序?
- 22. 如何在linux上實現clock_gettime?
- 23. 實現android系統
- 24. 空指針光標SQLiteOpenHelper在android系統
- 25. Linux內核系統調用返回沒有給出的指針
- 26. 獲取堆棧指針x86_64 linux系統調用
- 27. 如何爲原始指針實現`Default`?
- 28. 如何在TComboBox子系統上鍵入時實現查找
- 29. 在linux內核中使用雙指針哈希列表實現
- 30. Android系統如何實現內部intentservice
@agou:不,Windows VMM不會讓您分配虛擬地址爲零的塊。 –
@agou'*(char *)0'是未定義的行爲,因爲它將一個空指針解引用(0是一個空指針常量)。如果地址0x00有效,爲了獲得一個可用的指針,你必須使用不同的方法。但是沒有可移植的方式。 –