在c语言中,将数组定义在函数体内,如果数组容量较大将发生段错误。
原因分析:
在函数体内定义的局部变量被存储在内存的栈区,栈区容量较小,数据容量大时会发生溢出。
解决方案:
(1)使用指针,将数组定义为指针,通过malloc创建相同容量的数组空间,程序未见异常;
原因:malloc创建的指针一般在堆中分配内存。
(2)使用全局变量,将数组定义为全局变量,程序可以正常运行;
原因:全局变量在全局区(静态区分配内存)
c语言中的内存分配机制
代码段:存放代码,只读
全局区(静态区):.data存放已经初始化的全局变量和静态变量(静态全局和静态局部),.bss未初始化的全局变量和静态变量(静态全局和静态局部),.bss会将未初始化的变量填充为0;
堆区:函数malloc和realloc一般从堆上分配;
栈区:主要存放局部变量,函数形参,函数地址;
常量区:存储字符串常量。