7

我刚刚发现有一个 STATUS_STACK_BUFFER_OVERRUN 和一个 STATUS_STACK_OVERFLOW。这2个有什么区别?我刚刚发现堆栈溢出(堆栈耗尽)与堆栈缓冲区溢出不同,但要么没有解释,要么我不明白。你能帮我吗?

问候托拜厄斯

4

2 回答 2

8

考虑以下在内存中向下增长的堆栈:

+----------------+
| some data      |   |
+----------------+   | growth of stack
| 20-byte string |   V
+----------------+
 limit of stack

当您将 30 个字节写入 20 字节字符串时,会发生缓冲区溢出。这会破坏堆栈中的条目(“某些数据”)。

堆栈溢出是当您尝试在堆栈已满时将其他内容推入堆栈(此处显示“堆栈限制”)堆栈的最大大小通常受到限制。

于 2012-10-11T10:15:38.373 回答
0

Stackoverflow当内存中没有更多空间来分配数据时出现,并且当程序超出缓冲区边界并在内存的意外部分写入/覆盖数据(占用比预期更多的内存)时调用buffer overrunaka 。buffer overflow

很容易,您只需阅读标签stackoverflowbuffer overflow的描述即可理解这一点。

于 2012-10-11T10:23:06.983 回答