段错误
什么是段错误
段错误是指程序尝试访问一段不可访问的内存。
产生段错误的原因
程序运行过程中能访问到的空间主要有栈和堆,站存放了函数的本地变量,堆是程序运行过程中能够自由分配和使用的内存空间。产生段错误和栈、堆的访问密切相关。
原因主要有:
- 解引用空指针
- 访问不可访问的内存空间(如内核空间)
- 访问不存在的内存地址
- 栈溢出(递归函数调用)
- 使用未初始化的指针(定义时没有初始化或已经回收)
避免段错误
- 输入语句变量加取地址符&(数组名不用,本身代表首地址)
int a;
scanf("%d",&a);
- 定义指针后初始化
node* root = NULL;
node* root = new node;
- 数组下标不越界
- 在堆上分配空间是否够用(内存限制)
- 变量处理格式控制是否合理