我正在制作这样的自定义复制功能:
if (s1 == NULL || s2 == NULL || s2->buf == NULL)
return;
if (s1->len + 1 < s2->len + 1)
{
if (s1->buf)
free (s1->buf);
s1->buf = (char *) malloc (s2->len + 1);
if (s1->buf == NULL)
return;
}
for (int i = 0; i < s2->len; i++)
s1->buf[i] = s2->buf[i];
s1->len = s2->len;
其中s1和s2只是具有char指针和无符号整数的struct指针。
if (s1->len + 1 < s2->len + 1)
{
if (s1->buf)
free (s1->buf);
s1->buf = (char *) malloc (s2->len + 1);
if (s1->buf == NULL)
return;
}
这将检查s1内是否有足够的空间来适应s2。如果没有,它将检查现有内存并释放它。完成后,它将为s1分配一个新的内存块,其大小为s2 + 1(包括\ 0)。
这里是我困惑的地方
如果char指针中有足够的空间让s2适合s1(包括\ 0)并且它没有free()并再次调用malloc(),它只是指定for循环,它会保留s1的原始内容?
答案 0 :(得分:1)
如果char指针中有足够的空间让s2适合s1 (包括\ 0)并且它没有free()并再次调用malloc(),它只是 分配for循环,它会保留s1的原始内容吗?
如果有足够的空间,您不需要再次免费或使用malloc。只需坚持分配的块。
调用malloc
并不是特别之处:它只是给你一个指针,你可以开始存储数据。如果你已经拥有那个指针,那很好。