如果我在分配之前没有释放指针会发生什么

时间:2012-01-30 04:01:17

标签: c c99

我正在制作这样的自定义复制功能:

  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的原始内容?

1 个答案:

答案 0 :(得分:1)

  

如果char指针中有足够的空间让s2适合s1   (包括\ 0)并且它没有free()并再次调用malloc(),它只是   分配for循环,它会保留s1的原始内容吗?

如果有足够的空间,您不需要再次免费或使用malloc。只需坚持分配的块。

调用malloc并不是特别之处:它只是给你一个指针,你可以开始存储数据。如果你已经拥有那个指针,那很好。