堆/缓冲区溢出异常

发布于 2024-09-28 19:22:48 字数 52 浏览 6 评论 0原文

只是好奇,是否有人遇到过 C# 中的堆/缓冲区溢出异常?

Just curious, Is there or has anyone ever come across a heap / buffer overflow exception in C#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苏璃陌 2024-10-05 19:22:48

您可能会在 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”,因为它溢出了缓冲区。

如果没有不安全的代码,我不知道有什么方法可以导致缓冲区溢出而不触发异常。

You can cause a buffer overflow in C# in unsafe code. For example:

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);

The above will print "99" because it overflowed the buffer.

Absent unsafe code, I do not know of any way to cause a buffer overrun that doesn't trigger an exception.

酒废 2024-10-05 19:22:48

根据缓冲区溢出的含义,IndexOutOfRangeException 是由溢出引起的异常。您可以通过访问超出其分配大小的数组索引来相当轻松地获得它。同样,进行足够的递归,您可能会得到 StackOverflowException。我不确定你在寻找什么,所以你可能想澄清一下。

Depending on what you mean by Buffer overflow, an IndexOutOfRangeException is an exception caused by overflow. You can get it rather easily by accessing an array index beyond its allocation size. Similarly do enough recursion and you can get StackOverflowException. I am not sure about what you're looking for, so you might want to clarify.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文