前言
本人在Linux平台做智能影音系统项目的时候,出现了一个“栈错误”*** stack smashing detected ***: ./main terminated
通过在其他博主那里发现这个bug——我用的数组越界了!!!
一、错误类型
如图所示:
二、解决
代码如下(示例):
char video_name[100] = {0};
sprintf(video_name, "mplayer -quiet -slave -input file=/tmp/fifo_file ../VDO/%d.avi &", video_num);
现象:当时video_name数组的数组大小才只有30,拼接的时候,没有留意数组的大小,后来当我点击下一个视频,然后返回主界面的时候,发现主函数被终结了。
解决方法:把数组的大小改大一点就好了
总结
在嵌入式开发的过程中,我们经常遇到因为数组的大小而导致出现bug,例如,在用串口通信的时候,如果buf数组给的长度太小,那么,在传输数据的时候,内容会不完整,或者乱码。在linux,数组的大小不能满足需求,那么就会发送栈错误。