malloc 之后使用memset初始化

时间:2022-11-06 19:38:35

动态分配内存之后初始化:

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