Nic*_*yer 130
堆栈溢出特指执行堆栈超出为其保留的内存的情况.例如,如果调用一个递归调用自身而没有终止的函数,则会导致堆栈溢出,因为每个函数调用都会创建一个新的堆栈帧,并且堆栈最终将消耗比为其保留的内存更多的内存.
缓冲区溢出是指程序写入超出为任何缓冲区分配的内存末尾(包括在堆上,而不仅仅在堆栈上)的任何情况.例如,如果您写入从堆分配的数组的末尾,则会导致缓冲区溢出.
Cra*_*aig 18
关键的区别在于知道堆栈和缓冲区之间的区别.
堆栈是为执行程序执行而保留的空间.当您调用函数时,它的参数和返回信息将被放置在堆栈中.
缓冲区是用于单一目的的通用内存块.例如,字符串是缓冲区.它可以通过向字符串写入比分配的更多数据而过度运行.