2010-10-22 97 views
3

只是好奇,有沒有人遇到過堆溢出/緩衝區溢出在C#中的異常?堆/緩衝區溢出異常

+0

我會認爲使用'COM Interop'而不是純.NET開發時會出現這些類型的錯誤?任何人都知道我是否正確地認爲?你在說.NET中的託管堆嗎? – 2010-10-22 18:45:38

+0

這真的是一個「只是好奇」的問題嗎?在那種情況下,我投票結束它。我們每個人都有許多問題「只是好奇」,但他們並不都是值得回答的。另一方面,如果你確實遇到過這樣的例外,需要處理,我們可以談談。 – abelenky 2010-10-22 18:51:16

+0

我正在尋找純淨的.NET。我特意使用C++導致了緩衝區溢出(很久以前,不確定這是否適用於今天)。 – Viv 2010-10-22 18:52:54

回答

8

您可能會導致C#中的不安全代碼發生緩衝區溢出。例如:

public unsafe struct testo 
{ 
    public int before; 
    public fixed int items[16]; 
    public int after; 
} 

testo x = new testo(); 
x.after = 1; 
for (int i = 0; i <= 16; ++i) 
{ 
    unsafe 
    { 
     x.items[i] = 99; 
    } 
} 
Console.WriteLine(x.after); 

上面將打印「99」,因爲它溢出緩衝區。

如果沒有不安全的代碼,我不知道有什麼辦法可以導致緩衝區溢出,但不會觸發異常。

0

根據Buffer overflow的含義,IndexOutOfRangeException是溢出引起的異常。您可以通過訪問超出其分配大小的數組索引來輕鬆獲取它。同樣做足夠的遞歸,你可以得到StackOverflowException。我不確定你在找什麼,所以你可能想澄清一下。