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)