當前位置:編程學習大全網 - 編程軟體 - linux中的空指針問題

linux中的空指針問題

這個問題其實是在今天的JulianTec adil郵件列表中被問到的。壹和陳給出了答案:

這個問題還得從指針說起。。

C語言中的指針可以指向任何有效的數據,也可以

不指向任何東西;後者被稱為空指針。

當指向有效數據時,使用*對其進行解引用操作。

可以把數據拿出來;但是對於不指向任何數據的指針

操作*肯定沒意義吧?這其實是壹個

bug .

在現代操作系統設計中,為了消除這類程序。

Bug,故意分配壹個特殊的不可訪問的內存頁面,然後

在內部安排壹個空指針。這樣,當程序員在自己不小心的時候

在程序中寫下拾取空指針的操作後,系統運行。

您將報告壹個錯誤。

在windows和linux中,這樣的內存頁是由設計人員在

頁面上對應於開始的0地址。事實上,在這壹頁上,

沒有地址可以認領。*((char *)0)否,

也不允許使用*(char *)0x 12)之類的地址。

很多人認為空指針其實是指向地址0的指針。實際上,

其實這是不準確的。雖然很少,但也有壹些處理器架構

空指針從非零地址開始排列在頁面中。所以對於程來說

序列可移植性,當需要使用空指針時,使用NULL。

而不是用值0初始化指針變量。

妳可以訪問這裏的檔案:http://www.juliantec.info/mlist/archives/index.html.

但是今天,沒有這麽快,妳可以訪問這裏的記錄:

http://www.freelists.org/post/juliantec_list/char-0,1

  • 上一篇:WINCC中用壹個變量退出WINCC的C語言腳本編程
  • 下一篇:求壹小段英語翻譯 謝絕各種翻譯軟件 是有關編程的翻譯
  • copyright 2024編程學習大全網