<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 邊界檢查 ## 邊界檢查 ?(2014-02-18 10:05:42) ![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)轉載▼ | | 分類:?[C/Cpp](http://blog.sina.com.cn/s/articlelist_1198604677_2_1.html) | 邊界檢查在[程序設計](http://zh.wikipedia.org/wiki/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1 "程序設計")中是指在使用某一個[變量](http://zh.wikipedia.org/wiki/%E5%8F%98%E9%87%8F_(%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1) "變量 (程序設計)")前,用來檢查該變量是否處在一個特定范圍之內的過程。最常見的是[數組](http://zh.wikipedia.org/wiki/%E6%95%B0%E7%BB%84 "數組")的下標檢查,來防止下標超出數組的范圍而覆蓋其他的數據 由于每次都進行邊界檢查非常耗時,而且有些代碼是不可能產生越界的問題的,所以這個操作并不總是需要被執行。一些現代的[編譯器](http://zh.wikipedia.org/wiki/%E7%BC%96%E8%AF%91%E5%99%A8 "編譯器")中有被稱為選擇性邊界檢查的技術可以略去一些常見的不需要的邊界檢查來提高程序的性能。 當前的常見編程語言中,強制進行邊界檢查的有[C#](http://zh.wikipedia.org/wiki/C%E2%99%AF "C?")、[Ada](http://zh.wikipedia.org/wiki/Ada "Ada")、[Haskell](http://zh.wikipedia.org/wiki/Haskell "Haskell")、[Java](http://zh.wikipedia.org/wiki/Java "Java")、[JavaScript](http://zh.wikipedia.org/wiki/JavaScript "JavaScript")、[Lisp](http://zh.wikipedia.org/wiki/Lisp "Lisp")、[PHP](http://zh.wikipedia.org/wiki/PHP "PHP")、[Python](http://zh.wikipedia.org/wiki/Python "Python")、[Ruby](http://zh.wikipedia.org/wiki/Ruby "Ruby")和[Visual Basic](http://zh.wikipedia.org/wiki/Visual_Basic "Visual Basic")。其中C#同時也支持“unsafe塊”(不安全代碼塊),即一段暫時關閉邊界檢查、啟用指針以提高效率的代碼塊。這個功能常被用于加速一些小塊的不可能出現越界的代碼的執行,而不導致破壞整個程序的安全性。除了這些語言外,[D語言](http://zh.wikipedia.org/wiki/D%E8%AF%AD%E8%A8%80 "D語言")和[OCaml](http://zh.wikipedia.org/wiki/OCaml "OCaml")也支持自動邊界檢查,但是允許用戶通過編譯器的一個開關選項來選擇是否啟用該功能。 然而有一些[編程語言](http://zh.wikipedia.org/wiki/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80 "編程語言")(比如[C語言](http://zh.wikipedia.org/wiki/C%E8%AF%AD%E8%A8%80 "C語言"))為了提高速度,從來都不會自動進行邊界檢查,這經常導致[差一錯誤](http://zh.wikipedia.org/w/index.php?title=%E5%B7%AE%E4%B8%80%E9%94%99%E8%AF%AF&action=edit&redlink=1 "差一錯誤(頁面不存在)")(又稱“[柵欄錯誤](http://zh.wikipedia.org/w/index.php?title=%E6%A0%85%E6%A0%8F%E9%94%99%E8%AF%AF&action=edit&redlink=1 "柵欄錯誤(頁面不存在)")”:一個柵欄被一些柱子分區成10段,柱子的根數應該是*11*根,而不是*10*根。)和[緩沖區溢出](http://zh.wikipedia.org/wiki/%E7%BC%93%E5%86%B2%E5%8C%BA%E6%BA%A2%E5%87%BA "緩沖區溢出")的發生。許多程序員認為這些語言為了速度所付出的代價太大了 ? 范圍檢查 范圍檢查經常被用于確保某個數字處在一個特定的范圍之內。通常在訪問[數組](http://zh.wikipedia.org/wiki/%E6%95%B0%E7%BB%84 "數組")的時候會進行該檢查,因為當數組下標越界的時候,數據會被寫入其它變量的空間,甚至會覆蓋壓棧的寄存器數值。這樣一來,程序可能會崩潰,或者是導致一些安全漏洞的產生(見[緩沖區溢出](http://zh.wikipedia.org/wiki/%E7%BC%93%E5%86%B2%E5%8C%BA%E6%BA%A2%E5%87%BA "緩沖區溢出"))。在[Java](http://zh.wikipedia.org/wiki/Java "Java")中,[Java虛擬機](http://zh.wikipedia.org/wiki/Java%E8%99%9A%E6%8B%9F%E6%9C%BA "Java虛擬機")將在嘗試訪問數組中的元素的時候,自動的進行數組邊界檢查,并且在下標越界的時候引發[異常](http://zh.wikipedia.org/wiki/%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86 "異常處理")。 范圍檢查的另一個常見用途是在兩種數據類型相互轉換的時候。在構建在[.NET Framework](http://zh.wikipedia.org/wiki/.NET_Framework ".NET Framework")上的語言中,超出范圍的強制轉換將引發InvalidCastException類型的異常。 比如將一個[32位有符號整數](http://zh.wikipedia.org/wiki/%E6%95%B4%E6%95%B0#.E9.9B.BB.E8.85.A6.E4.B8.AD.E7.9A.84.E6.95.B4.E6.95.B8 "整數")類型的變量強制轉換到一個[16位有符號整數](http://zh.wikipedia.org/wiki/%E6%95%B4%E6%95%B0#.E9.9B.BB.E8.85.A6.E4.B8.AD.E7.9A.84.E6.95.B4.E6.95.B8 "整數")類型的變量之前,會檢查這個變量的值是否在-32768~+32767?之間(16位有符號整數可以表示的整數范圍),而不是諸如32768之類的無法表示的數字。 數組下標檢查 數組下標檢查是指在程序中,所有數組下標的[表達式](http://zh.wikipedia.org/wiki/%E8%A1%A8%E8%BE%BE%E5%BC%8F "表達式")的結果在真正被用來訪問某一個特定的元素之前,先把它的值和定義[數組](http://zh.wikipedia.org/wiki/%E6%95%B0%E7%BB%84 "數組")時給出的數組上界和下界進行比較。如果一個下標超出了預期的范圍時,那么就引發一個錯誤來阻止進一步的訪問。(例如:[.NET Framework](http://zh.wikipedia.org/wiki/.NET_Framework ".NET Framework")中的IndexOutOfRangeException和ArgumentOutOfRangeException類型[異常](http://zh.wikipedia.org/wiki/%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86 "異常處理")) 比如在訪問一個下標范圍是0~9的數組前檢查下標是否也在?0~9內,而不是如25之類的越過數組結尾的下標。 除了軟件實現的下標檢查之外,[VAX](http://zh.wikipedia.org/wiki/VAX "VAX")架構的計算機擁有一條INDEX匯編指令,可以用來檢查數組的下標是否越界,可以至多提供6個任意VAX編址的地址。B6500和一些相似的[伯勒斯](http://zh.wikipedia.org/w/index.php?title=%E4%BC%AF%E5%8B%92%E6%96%AF&action=edit&redlink=1 "伯勒斯(頁面不存在)")計算機則以硬件進行邊界檢查,無論是采用什么語言撰寫的程序。 數據驗證 在數據集合數據質量范疇中,邊界檢查表示檢查一個并不總是錯誤的數據。比如,一個成年人的身高應該處在0到3米之間、利用率應該在0到1之間等。 ? ?例如以下代碼: int?main() { ????inti[10]?=?{0}; ????int?p?=?0; ????for(p=0;p10;p++) ????{ ????????i[p]?=?4; ????} ????return?0; } 當訪問i[10]的時候數組下標越界,實際上訪問了p所在的內存,于是p被設置成4繼續循環,這樣一來程序只會死循環而不會終止運行 以下行為,編譯可以通過,并且能夠運行。 1:聲明數組但不初始化。2:數組越界。 # C++指針:對于多維數組,所謂“不檢查數組邊界”只不檢查最高維(第一維)的邊界,其他邊界控制 比如說int a[5][2]實際上在內存里面是連續的10個int,分別為第0個到第9個元素, 所以??a[3][2]?(雖然越界)但實際上等于3*2+2=8,第8個元素,即a[4][0] 參考:[http://book.2cto.com/201312/38501.html](http://book.2cto.com/201312/38501.html)?C11附錄K邊界檢查接口 來源:[邊界檢查_0o青絲_新浪博客](http://blog.sina.com.cn/s/blog_477141850101g455.html) ### 擴展 [關于程序的邊界檢查 - CSDN博客](http://blog.csdn.net/lanonjj/article/details/52739874) last update:2018-1-19 03:07:21
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看