动态分配内存之后初始化:
1.使用malloc--malloc的问题是如果该块内存没有使用过的话第一次运行都是正确的。之后如果重分配再使用,内存的值是不会自动清空的。!!所以再分配时需要初始化下
main()
{
char *p = (int *)malloc(sizeof(char) * 10);
if (NULL == p)
{
exit (1);
}
memset(p, 0, sizeof(char) * 10);
}
以下的代码是由问题的--该方法被多次频繁调用,buf指向的动态内存也是被重复创建,释放。但可能都是指向同一块堆内存。没有初始化的话,除第一次外buf中的内容总是有上几次字符转码的残留字符:
char* buf = (char*)malloc(src_length * 2 * sizeof(src_length));
if(buf != NULL)
{
convert(src.c_str(), src.size(), buf, src_length * 2 * sizeof(src_length) );
}
else
{
return -1;
free(buf);
buf = NULL;
}
des.assign(buf,strlen(buf));
std::cout << des << endl;
free(buf);
buf = NULL;
}
else
{
return -2;
}
2.使用calloc解决这个问题。calloc可以初始化为0