调用一个函数时发生段错误:Segmentation fault
加入打印日志之后,发现运行时根本没有进入该函数就已经crash,
将该函数全部注释掉在运行时又一切正常。
经过调试发现原因:该函数中存在一个大数组
#define BUFFER_SIZE (1024 * 1024)
char buffer[BUFFER_SIZE];
将BUFFER_SIZE改为(4 * 1024)之后程序运行正常。
分析结果:
函数内的局部变量在栈内存中分配,而栈的大小有限制,使用的栈内存过大可能导致栈内存溢出,在实际运行时找不到函数入口。
如果一定要使用大块的内存可以使用全局变量(数据段)、静态变量(static,数据段)、动态分配内存(堆)。
使用ulimit -a查看栈内存大小