memcpy(szTest, szBuf, sizeof(szTest) - 1);引起的一个超低概率core dump问题的定位------谁说用memcpy能代替strcpy?

972 篇文章 329 订阅
461 篇文章 67 订阅

        某次, 在某模块, 有个非常低概率的core dump,  经多方面长时间围追堵截, 发现core在memcpy中了, 一起来看看:

#include <iostream>
using namespace std;

int main() 
{
	char szTest[1024] = {0};
	char szBuf[50] = "abc";
	memcpy(szTest, szBuf, sizeof(szTest) - 1);

	return 0;
}
       初看, 可能觉得没什么问题, 我们的strncpy和snprintf经常这么用啊, 但仔细审视一下, 发现上述代码是有问题的。 memcpy是内存的考虑, 与字符串是否结束没有关系, 与是否用'\0'结尾也没有关系。 所以, 在szBuf后, 可能访问到非法地址的值, 所以就会core dump.  

      如上的memcpy用法, 需做个判断才好! 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值