一例由于栈溢出导致valgrind报告Invalid write的错误

使用Valgrind检查新写好的代码,在调用函数a时,valgrind报告了一系列的Invalid write和Invalid read,警告所在行数就是函数a的定义位置,让人摸不着头脑。而且也不是每次调用a都会告警。

不经意间发现在Invalid write之前还有一个SP change的警告,在这个警告的提醒下发现函数a中一个局部变量数组特别大,达到了6MB,加上其它数据超过了栈空间linux默认为10M),在某些情况下会导致栈溢出,并导致一系列莫名其妙的问题,很难定位原因。

记录一下,引以为戒,局部变量如果出现一个大数组,一定考虑它的大小,可以考虑替换为静态变量,或者用malloc。

你可能感兴趣的:(linux,write,Invalid,valgrind,栈溢出)