gpt4 book ai didi

c - 释放 C 中动态内存的第一部分

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

我正在编程 esp8266 将数据发送到服务器。部分程序会在没有 WiFi 的情况下缓冲数据。然而,该缓冲区可能会变得非常大,我需要一种方法在连接恢复时对其进行部分处理。

char* buff = "\0";
\\ I know that realloc() may return NULL and I will fix it later
buff = realloc(buff, strlen(buff)+strlen(data)+1);
strcat(buff, data);

当我开始处理缓冲区时,我需要一次处理任意数量的字节。当我完成后,我只需要释放它们。像这样:

buff = realloc(buff, strlen(buff)-x);

问题是我需要释放 buff[0] 到 buff[x-1],而不是 buff[x] 到 buff[strlen(buff)]

关于如何在没有 strdup() 或其他并发症的情况下干净地做到这一点,有什么建议吗?

另外,我不想存储缓冲区的地址并在处理完成后释放它

编辑: char* buff = calloc(2, 1);确实如此,但这与主要问题(仍未解决)没有任何关系。

最佳答案

而不是仅仅做:

buff = realloc(buff, strlen(buff)-x);

这基本上只是截断缓冲区,您需要移动要保留在 buff 指针开头的字节,然后调用 realloc:

int newlength = strlen(buff + x) + 1; // + 1 for the NUL terminator
memmove(buff, buff+x, newlength);
buff = realloc(buff, newlength);

如果缓冲区很长,这可能效率低下。如果性能是这里的一个问题,那么事情就会变得有点复杂。

关于c - 释放 C 中动态内存的第一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49775436/

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