gpt4 book ai didi

c - 如果我在分配指针之前不释放它会发生什么

转载 作者:行者123 更新时间:2023-11-30 15:59:19 24 4
gpt4 key购买 nike

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

  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 指针和一个无符号整数。

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

最佳答案

if there is enough space in the char pointer for s2 to fit into s1 (including \0) and it doesn't free() and call malloc() again, it just assigns with the for loop, will it keep the original contents of s1?

如果有足够的空间,则无需再次释放或分配。只需保留分配的 block 即可。

调用 malloc 并不是什么特别的事情:它只是为您提供一个可以开始存储数据的指针。如果您已经有了该指针,那就太好了。

关于c - 如果我在分配指针之前不释放它会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com