内存踩踏(Memory Corruption)是指程序错误地访问或修改了不应该访问的内存区域,导致程序行为异常或崩溃。内存踩踏是 C/C++ 等低级语言中常见的错误类型,通常难以调试和修复。以下是常见的内存踩踏类型及其原因:
1. 缓冲区溢出(Buffer Overflow)
- 定义:当程序向缓冲区写入的数据超过其分配的大小时,会覆盖相邻内存区域。
- 常见原因:
- 使用不安全的函数(如
strcpy
、gets
)而未检查输入长度。 - 数组访问越界。
- 使用不安全的函数(如
- 示例:
char buffer[10]; strcpy(buffer, "This string is too long!"); // 缓冲区溢出
2. 缓冲区下溢(Buffer Underflow)
- 定义:当程序向缓冲区写入数据时,访问了缓冲区之前的内存区域。
- 常见原因:
- 数组下标为负数。
- 指针计算错误。
- 示例:
int array[10]; array[-1] = 42; // 缓冲区下溢