某次, 在某模块, 有个非常低概率的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用法, 需做个判断才好! 



本文转载:CSDN博客