雅乐网

计算机技术、学习成长

编程 » C/C++ » strcpy的陷阱,程序运行结束时崩溃,stack around the variable “XX” was corrupted.

strcpy的陷阱,程序运行结束时崩溃,stack around the variable “XX” was corrupted.

今天写程序时用到了strcpy()这个函数,

每次程序到运行结束时都会崩溃,显示这种错误

stack around the variable “XX” was corrupted.

QQ图片20150928235042

经过检查发现,我使用strcpy拷贝的源字符串的长度超出了目标数组的大小,即lenth(src)>lenth(dest);

但是输出结果显示的是源字符串的值,说明strcpy在越界时是不检查的,它会继续覆盖边界外的内存,即修改了dest数组外面的值,直到达到src的长度;

360反馈意见截图16671025207356

 

这里我又单独写了个demo运行居然又不报错了

QQ图片20150929001346

 

说明这个函数的可怕之处在于它出错是偶然性的,之前报错的程序中我还使用了socket,MySQL等大量函数,可能是它强制向后写栈区时,如果是空栈区就不会报错,遇到了非空栈区也不在运行时报错,到运行介绍归还栈区时才报错。

某个工程在开发环境运行通过了,到生产环境崩溃的后果不堪设想。

 

因此推荐使用更安全的strncpy()函数,它使用时需要指定拷贝的长度,超出部分不会复制

QQ图片20150928235054

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
http://www.yalewoo.com/strcpy_lead_to_crash_stack-around-the-variable-xx-was-corrupted.html

上一篇:

下一篇:

我要评论

验证码*: 9 + 1 =