java - 缓冲区溢出 (vs) 缓冲区溢出 (vs) 堆栈溢出

标签 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/

相关文章:

c - 每行中数组的唯一元素

java - 每个测试用例的代码覆盖率库

java - ChangeListener<? 的未选中警告super TableRow>-参数

java - Spring 应用程序错误: EL1008E

c++ - 奇怪的 VC++ 编译错误,C2244

c++ - 如何在同一系统中为不同的用户帐户注册相同的 COM dll

C 对齐不是 2 的幂

c - C11 _Generic 与 C 预处理器的 'essence' 不矛盾吗?

java - 具有多种服务的Tomcat

c++ - 迭代器实际上指向容器中的什么?