Исключение переполнения кучи / буфера - PullRequest
4 голосов
/ 22 октября 2010

Просто любопытно, есть или кто-нибудь когда-либо сталкивался с переполнением кучи / буфера исключение в C #?

Ответы [ 2 ]

8 голосов
/ 22 октября 2010

Вы можете вызвать переполнение буфера в 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 голосов
/ 22 октября 2010

В зависимости от того, что вы подразумеваете под переполнением буфера, исключение IndexOutOfRangeException является исключением, вызванным переполнением.Вы можете получить его довольно легко, обратившись к индексу массива за пределами его размера выделения.Точно так же сделайте достаточно рекурсии, и вы можете получить StackOverflowException.Я не уверен в том, что вы ищете, поэтому вы можете уточнить.

...