<form id="itnzz"><noscript id="itnzz"></noscript></form>

          1. <menuitem id="itnzz"></menuitem>
          2. 成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
            現在位置:范文先生網>理工論文>計算機信息技術>為何出現“非法操作

            為何出現“非法操作

            時間:2023-02-21 00:09:24 計算機信息技術 我要投稿
            • 相關推薦

            為何出現“非法操作

            為何出現“非法操作”

            徐淼華

            中國科學技術大學少年班9700230026

             

               在使用電腦的過程中,尤其是編程的時候,經常會遇到Windows彈出如圖所示的對話框,提示軟件進行了非法操作:


                                    圖:點擊了“詳細資料”后的對話框

             

            此時如果點擊“詳細資料”,對話框擴大窗口,給出了寄存器的值,但是一般人看不明白;而如果點擊“調試”,它將調用Visual C++Delphi之類的安裝在系統中的編譯器,并在編譯器中顯示程序的匯編碼,更是讓人頭大一圈;若點擊“關閉”,則會將內存中的相關數據都丟棄(很多時候這些數據是有用的),非常可惜。

            引起Windows彈出此對話框的原因是內存出錯。內存質量不好,不穩定,某些數據無端的改變,當然被認為是“非法操作”。這里討論的是軟件特別是自己編寫的小程序是如何引起錯誤的。Windows 9X中,不必關心內存模式、地址轉換、64K的代碼段和數據段,因為地址和內存都放在線形的

            32位內存空間中。每個應用程序都可“看見”4GB的線形地址空間,其中最開始的4MB由操作系統保留,剩下的不足2GB的空間屬于應用程序私有空間。要強調的是,在4MB 2GB之間的非保留空間是完全私有的。每個進程都可有自己私有的地址空間,而且與其他進程的地址空間是完全無關的。利用處理器的頁映射能力,操作系統可為每個進程提供獨立的從邏輯地址到物理內存(RAM或分頁文件)的映射,使一個進程的地址空間對另一個進程完全不可見。編程時,若一個進程(程序)訪問了它的地址空間外的地址,Windows 9X就會彈出上述對話框。具體有以下幾個原因:

            1.數組下標越界

            觀察以下程序:

            #include<stdio.h>

            void main()

            {

                int a[5];

                a[5]=0;

            }

            大家知道,C語言不檢查數組下標越界,該程序編譯可通過。執行時引發上述錯誤,這是因為語句int a[5]只定義了a[0]a[4]a[5]訪問的地址不屬于程序的地址空間。要特別注意數組下標,除了上述原因外,它的錯誤還往往伴隨著邏輯錯誤(符合語法但得不到正確的結果)。

             

            2.未初始化的指針

            觀察以下程序:

            void main()

            {

            int *a;

            *a=0;

            }

            語句int *a

            定義了一個指針,a中存放的只是一個地址,它是一個隨機數,極可能指向其它進程的地址空間。對該地址進行讀寫操作,也極可能引發上述錯誤。修改的辦法是再定義一個整型變量,并將它的地址賦給指針變量a。純DOS操作系統允許程序對它本身以外的地址進行操作。我在DOS下編程時,曾因忘了初始化指針,而將整個編譯器搞得面目全非。

            3.棧溢出

            這是最不易察覺的一點。我是在編寫一個圖象處理軟件時遇到的,當時真是百思不得其解:

            #include<stdio.h>

            void func()

            {

                int  a[300000];

                printf("Now Call Functions");

            }

            void main()

            {

                func();

            }

            程序運行時,系統在棧中為局部變量開辟空間。局部變量有很多好處,但是必須保證棧的空間足夠。該程序定義了長為300000的整數數組局部變量,它超出了棧的大小。通過修改數組的長度,看是否會出現“非法操作”,得知我所用的系統(Windows NT4)在缺省條件下,棧的大小在200000300000之間。另外,使用遞歸不當,也會引起棧的溢出。解決的辦法一般并非將局部變量該為全局變量(盡管實際用到的內存再大,Windows也能支持,但從效率來說一般不這樣做),而是使用動態分配內存技術,從“堆”中分配內存。將語句int  a[300000] 改為 int  a=new int[300000],然后仍然a看成長為300000的數組使用。

             

            最后提醒大家,編寫程序后,編譯運行前存盤,做到“有備無患”。

             

                                                        中國科學技術大學(230026

                                                          徐淼華 vince_xu@263.net

                                                               2000,3,16     


            【為何出現“非法操作】相關文章:

            為何微笑,為何流淚08-16

            防止出現“真空”08-17

            出現優秀作文08-31

            期權在中國為何緩行08-05

            監管為何效率低?08-05

            產權為何重要08-07

            產權為何重要08-12

            市長為何要辭官08-17

            他們為何誦讀困難08-17

            主站蜘蛛池模板: 日韩激情一区二区三区| 国产精品日日摸夜夜添夜夜添2021| 欧美熟妇性XXXX欧美熟人多毛| 国产精品夫妇激情啪发布| 九九热在线视频免费播放| 亚洲国产美女精品久久久| 99久久亚洲精品影院| 国产午夜影视大全免费观看| 日韩人妻无码一区二区三区综合部| 九色综合国产一区二区三区| 亚洲av永久无码精品成人| 国产一国产一级毛片aaa| 亚洲精品国模一区二区| 人妻无码久久中文字幕专区| 久久免费观看归女高潮特黄| 国产成人免费观看在线视频| 国产成人高清精品免费软件| 麻豆一区二区中文字幕| 搡老女人老妇女老熟妇69| 蜜臀av一区二区三区在线| 人妻va精品va欧美va| 丰满少妇在线观看网站| 亚洲色偷偷色噜噜狠狠99| 久久久久亚洲精品美女| 野外做受三级视频| 老司机亚洲精品影院| 国产国拍亚洲精品永久软件| 亚洲av无码专区亚洲av伊甸园| 亚洲aⅴ无码专区在线观看q| 无码A级毛片免费视频下载| 亚洲第一视频在线观看| 在线 欧美 中文 亚洲 精品| 激情欧美精品一区二区| gogo无码大胆啪啪艺术| 三级网站| 午夜夜福利一区二区三区| 女人被狂躁的高潮免费视频 | 高清自拍亚洲精品二区| 无码精品人妻一区二区三区中| 九九热这里只有精品在线| 亚洲男同gay在线观看|