C 动态数组的释放?

C 动态数组的释放?,c,arrays,dynamic,C,Arrays,Dynamic,这是我正在使用的代码 while(temp[i]!=0){ while(temp[i]!=3){ FrameBuffer[a]=temp[i]; i++; a++; } FrameBuffer[a]=temp[i]; printf(" Framebuffer: %s ", FrameBuffer); result=layer1(FrameBuffer,PacketAction); i++; a

这是我正在使用的代码

while(temp[i]!=0){
    while(temp[i]!=3){
        FrameBuffer[a]=temp[i];
        i++;
        a++;
    }
    FrameBuffer[a]=temp[i];
    printf(" Framebuffer: %s ", FrameBuffer);
    result=layer1(FrameBuffer,PacketAction);
    i++;
    a=0;
}

问题是,我希望帧缓冲区每次通过内部while循环时都被重置(循环开始时帧缓冲区的大小为0)。我尝试过使用free(帧缓冲区),但由于多次释放数组,因此出现了一个错误。我还尝试过编写FrameBuffer=NULL,但没有成功。任何帮助都将不胜感激。谢谢大家!

如果只需要在每个内部循环开始之前初始化帧缓冲区,则可以使用
memset

while(temp[i]!=0) {
    memset(FrameBuffer, 0, sizeof(FrameBuffer));

    while(temp[i]!=3) {

由于您没有显示声明或对输入字符串
temp
给出特别好的描述,因此很难知道您在做什么

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

extern int somefunc(const char *fb, int pa);
extern int layer1(const char *fb, int pa);

int somefunc(const char *temp, int PacketAction)
{
    int rc = 0;
    char *FrameBuffer = calloc(2048, sizeof(char));
    if (FrameBuffer != 0)
    {
        int i = 0;
        while (temp[i] != '\0')
        {
            int a = 0;
            while (temp[i] != 3)
                FrameBuffer[a++] = temp[i++];
            FrameBuffer[a++] = temp[i++];
            FrameBuffer[a] = '\0';
            assert(a < 2048);
            printf("Framebuffer: %.*s\n", a, FrameBuffer);
            int result = layer1(FrameBuffer, PacketAction);
            if (rc == 0)
                rc = result;
        }
    }
    return rc;
}

代码可以写得更有弹性。它可能会使用
strlen(temp)
,但从可用信息来看它不是绝对清晰的。

请展示更多信息,特别是如何声明
帧缓冲区
。此外,除非添加字符串终止符
'\0'
,否则不能将其用作字符串。我将其声明为。。。char*FrameBuffer=calloc(2048,sizeof(char));如果它实际上只包含以null结尾的字符串,则不需要释放或清除它,只需将
'\0'
写入最后一个字节即可。恐怕你在让我们猜测你所说的“重置”是什么意思。嗯,也许我对“以null结尾的字符串”这个术语感到困惑。几乎while循环的第一次迭代要经过99次,第二次迭代要经过98次。帧缓冲区[0]-帧缓冲区[97]将被覆盖,这是我想要的。但是帧缓冲区[98]将具有与第一次迭代相同的内容。我希望在每次迭代后帧缓冲区中没有任何内容。嗯,我尝试过,但它仍然没有清空帧缓冲区的内容。我已经测试了代码,它可以正常工作。你确定printf语句或任何用来检查帧缓冲区内容的语句在代码中的正确位置吗?所以memset做了这个把戏。唯一不起作用的是“sizeof(FrameBuffer)”,但当我把它改成StrLen时,它确实起作用了。非常感谢你们的帮助。当我在C中学习一个新的关键字时总是很好的。
memset()
是一个函数,而不是一个关键字。
void somefunc(const char *temp, size_t templen, int PacketAction)