<分区>
Possible Duplicate:
What is the difference between a stack overflow and buffer overflow ?
缓冲区溢出和缓冲区溢出有什么区别?
缓冲区溢出和堆栈溢出有什么区别?
请包括代码示例。我查看了维基百科中的术语,但无法与 C 或 C++ 或 Java 中的编程相匹配。
标签 java c++ c operating-system
<分区>
Possible Duplicate:
What is the difference between a stack overflow and buffer overflow ?
缓冲区溢出和缓冲区溢出有什么区别?
缓冲区溢出和堆栈溢出有什么区别?
请包括代码示例。我查看了维基百科中的术语,但无法与 C 或 C++ 或 Java 中的编程相匹配。
最佳答案
将缓冲区视为一个数组。每当您尝试引用超出数组末尾的索引时,人们通常会互换使用“溢出”和“溢出”,这很好。就我个人而言,我做了一个区分:
缓冲区溢出 是指您尝试在数组中放置的项超出数组的容量。它们从缓冲区的末端流出。换句话说,它来自写作。
缓冲区溢出 是指您遍历缓冲区并继续读取超过数组末尾的内容。您的迭代器正在运行缓冲区并继续运行。换句话说,它来自阅读。
堆栈溢出则大不相同。大多数现代编程环境都是基于堆栈的,它们使用堆栈数据结构来控制程序流。每次调用函数时,都会在程序的调用堆栈中放置一个新项。当函数返回时,该项目将从堆栈中弹出。当栈为空时,程序停止。问题是,这个堆栈的大小是有限的。一次调用太多函数并填满堆栈是可能的。此时你有一个堆栈溢出。执行此操作的最常见方法是函数调用自身(递归)。
关于java - 缓冲区溢出 (vs) 缓冲区溢出 (vs) 堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1144088/