作者 主題: [問題] 記憶體覆寫的極限在那裡呢  (閱讀 7385 次)

0 會員 與 1 訪客 正在閱讀本文。

asdf

  • 憂鬱的高中生
  • ***
  • 文章數: 115
    • 檢視個人資料
[問題] 記憶體覆寫的極限在那裡呢
« 於: 2005-08-05 07:51 »
我的環境:
Win98
Compiler: gcc 2.95.3-6
IDE:      Bloodshed Software Dev-C++ 4.9.7.0

我宣告一個陣列:

      int arrInt[10];   //陣列名稱為arrInt,型態為int,大小為10

    for(int i=0; i<22; i++){
        arrInt = 100;
        fout << arrInt << endl;   // fout 有宣告過,輸出到檔案
    }

我要從 arrInt[0] 寫到 arrInt[21]
是因為我想挑戰它的極限
i<10 到 i<16 都可以把記憶體中原有的資料覆寫過去
(原本不是 100 也不是0 位址,被覆寫成100)
(本來我以為:其值為 0 的位址可覆寫,非 0 則不可覆寫,可是錯了)
可是i<17 開始
執行時會出現 "這個程式執行的作業無效,即將關閉"

記憶體覆寫的極限在那裡呢?
he important thing is not to stop questioning.
                                             -- Albert Einstein

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #1 於: 2005-08-05 23:08 »
問題不在什麼覆寫不覆寫上頭。

你為何要存取超過所宣告的陣列之外的資料呢?
這才是你的問題所在吧!

asdf

  • 憂鬱的高中生
  • ***
  • 文章數: 115
    • 檢視個人資料
Re: [問題] 記憶體覆寫的極限在那裡呢
« 回覆 #2 於: 2005-08-06 07:21 »
我說過了
引述: "asdf"
我想挑戰它
he important thing is not to stop questioning.
                                             -- Albert Einstein

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
Re: [問題] 記憶體覆寫的極限在那裡呢
« 回覆 #3 於: 2005-08-06 12:36 »
引述: "asdf"
我說過了
引述: "asdf"
我想挑戰它


沒意義。

因為資料可能會寫到不應該寫入的地方。運氣好一點是寫到其他變數區段,導致其他變數被破壞。嚴重一點資料寫到唯讀的程式碼執行區段導致程式錯誤結束。

==
I am kenduest - 小州

my website: http://kenduest.sayya.org/

anderson1127

  • 訪客
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #4 於: 2005-08-06 15:45 »
難道樓主不知道甚麼叫做x86 protection mode ??

如果想這樣惡搞,不如自己寫Operation System (OS)來惡搞!!

PS: 你很快瞭解,前輩說的 沒意義指的是什麼了!!

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #5 於: 2005-08-06 18:52 »
突然覺得 asdf 老兄好面熟的感覺,稍微 search 了一下,天吶!
老兄,您兩年前就開始問這類問題了,怎麼兩年來絲毫沒有進步呢?

這樣的話,小弟誠懇地建議您,換個方向發展比較好,真的。

asdf

  • 憂鬱的高中生
  • ***
  • 文章數: 115
    • 檢視個人資料
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #6 於: 2005-08-08 06:42 »
引述: "螢火飛"
老兄,您兩年前就開始問這類問題了,怎麼兩年來絲毫沒有進步呢?

不好意思
我確實是兩年前開始學C++
可是因為功課太忙
中斷了一年多
he important thing is not to stop questioning.
                                             -- Albert Einstein

asdf

  • 憂鬱的高中生
  • ***
  • 文章數: 115
    • 檢視個人資料
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #7 於: 2005-08-08 06:43 »
甚麼叫做x86 protection mode
he important thing is not to stop questioning.
                                             -- Albert Einstein

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #8 於: 2005-08-08 11:54 »
引述: "asdf"
甚麼叫做x86 protection mode


建請你從計算機概論看起,基礎不穩,樓蓋不高。

jou

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 4989
  • 性別: 男
    • 檢視個人資料
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #9 於: 2005-08-08 11:59 »
引述: "thyme"
引述: "asdf"
甚麼叫做x86 protection mode


建請你從計算機概論看起,基礎不穩,樓蓋不高。


是啦!是啦!
既實蓋起來了,也會變成危樓,賣不出去
賣出去了,也會發生糾紛! :x

anderson1127

  • 訪客
[問題] 記憶體覆寫的極限在那裡呢
« 回覆 #10 於: 2005-08-09 00:03 »
引述: "asdf"
甚麼叫做x86 protection mode


給你一個誠心的建議,如果對計算機結構不熟的話,就別學C/C++了
因為程式寫到夠深入的話,會有很多linking list ,來個東西南北指一通
這時很多地方,就會運用上很多的計算機結構的概念,又不懂的話,我很難相信
這時可以寫出bugless 程式!!

但此門過高的門檻不易跨入之外,卻也不是沒有入手的地方,比如說HTML設計
美工套版等等的事務,都是可以從事的工作!! 因為這些不會去涉及計算機結構的!!

考慮一下吧!!