什么是堆栈溢出和缓冲区溢出错误?

时间:2010-10-11 12:39:39

标签: stack-overflow terminology

  

可能重复:
  What is a stack overflow error?

好吧,我听过它在编写程序时遇到的最常见的错误...我是编程新手,只有2年的编码,我从未遇到过这个错误!因此,冒着听起来非常愚蠢的风险,我想问一下......什么是stackoverflow以及什么是bufferoverflow?

stackoverflow是否与缓冲区溢出有关?

一个wiki链接实际上不会帮助我因为我已经完成了它并且我不理解它。所以如果你能把它愚蠢......你会怎么说呢?

2 个答案:

答案 0 :(得分:6)

大多数操作系统在数据结构中保存程序信息,称为堆栈和堆。

当一个人向堆栈添加的信息多于允许保留的信息时,会发生StackOverflow(很多时候,这可能发生在递归函数中,而没有终止子句)。


缓冲区是一组用于保存临时数据的内存位置(通常是连续的)。尝试写入超出缓冲区末尾的内存时发生缓冲区溢出。这具有安全隐患,因为有时超出缓冲区的内存不受保护,并且代码可能会在执行后插入。

答案 1 :(得分:2)

StackOverflow是当你用完程序执行的堆栈空间不足时会发生的事情。

我前几天收到了一些写得不好的事件代码,其中一个事件会触发另一个事件导致原始事件,依此类推,直到堆栈溢出方法调用。

当您尝试将数据写入数组末尾时会发生缓冲区溢出或缓冲区溢出。例如

char* s = "hello";
s[7] = 'g';

不知道在字符串中的位置7写'g'会做什么。恶意程序员可以使用这种技术在系统上执行任意代码。

相关问题