内存泄露和缓冲区溢出

什么是内存泄露?

  • 一般我们常说的内存泄露是指堆内存的泄露。堆内存是指程序从堆中分配的,大小任意的内存块,使用完后必须显示释放的内存。应用程序一般使用malloc、realloc、new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能再被使用,我们就说这块内存泄露了。

什么是缓冲区溢出?

  • 缓冲区溢出是指向缓冲区内填充数据位数超过了缓冲区本身的容量限制,导致溢出的数据覆盖在合法数据上的情况。理想的情况是程序检查数据长度并不允许输出超出缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这九尾缓冲区溢出埋下了隐患。