做刷赞网站能赚钱吗,简网app工厂,电商网站建设心得体会,网站搭建大型公司什么段 我们在学习微机原理的时候就遇到过段#xff0c;它代表在一个可执行文件中各种的类型信息存放的地方。 正文段#xff1a;text用于存储指令#xff1b; 数据段#xff1a;data用于存储已初始化的全局变量#xff1b; bss段#xff1a;用来存放程序中未…什么段 我们在学习微机原理的时候就遇到过段它代表在一个可执行文件中各种的类型信息存放的地方。 正文段text用于存储指令 数据段data用于存储已初始化的全局变量 bss段用来存放程序中未初始化或者初始化为0的全局变量和静态变量 堆栈段stack和其他段一样有着自己的大小一旦越界同样会爆段错误。它是在运行时程序动态创建的一个堆栈段放着调用栈保存着函数调用关系和局部变量。
造成段错误的原因一般有如下三点
1.内存访问出错 这类问题的典型代表就是数组越界、变量类型不一致等。 2.非法内存访问 这类问题主要是程序试图访问内核段内存而产生的错误。 3.栈溢出 栈就是用来描述函数之间的调用关系它由多个栈帧组成每个栈帧代表着对应运行的函数。栈溢出指的是对栈的使用超出的栈的大小。引起栈溢出的原因主要有二一个是局部变量所占用的空间太大解决方法增大栈空间或者用动态分配使用堆二是函数的调用/递归次数太多或者无限调用。
典型的段错误 int main(void){ char*s hello world;*s H;}在程序被装载时系统把“hello world” 连同其它字符串和const类型数据放入到内存的只读区域。在执行时一个变量s被设为指向该字符串的位置当再向该位置写时就会产生段错误。
int main()
{int*ptr NULL;*ptr 1;
}该代码仅仅创建了一个空指针没有指向一个具体空间当赋值时找不到具体的空间所以会产生段错误。
int main(void)
{int main();return 0;
}这个代码是很明显的无限递归这会导致栈溢出从而产生段错误。