gpt4 book ai didi

c - glibc 检测到双重释放或损坏

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:34 24 4
gpt4 key购买 nike

我有以下函数,它从串行设备读取缓冲区,获取一些 token 并每 10 秒打印一次这些 token 。我希望将这些结果保存在我在桌面上创建的 data.txt 中。在第一个循环中,我得到了结果,并且将它们保存在 txt 文件中,但第二次出现此错误

***glibc detected***/home/pi/Desktop/programming/bin/Debug/programming: double free or corruption(top):0x00dbe178 ***

我知道问题出在我分配的空闲内存上,但我不知道我的代码中的问题在哪里以及我该如何解决它。有人可以帮助我吗?

int learn_port2(int fd)
{
int i;
char buff[260];
memset(buff, 0, sizeof(buff));
char nodo[6] = "";
char temp[6] = "";
char hr[6] = "";
char dw[6] = "";
char vcc[6] = "";
char* ptr;

FILE *fp=fdopen(fd,"a+");
FILE *ft = fopen("/home/pi/Desktop/data.txt","a+");
time_t now;
time(&now);

while(fgets(buff, sizeof(buff), fp) != NULL)
{
fputs(buff,stdout);
char *pos = strchr(buff,'N');
if (pos)
{

ptr = strtok(buff, "Nodo_,=:V()");
i = 0;
while (ptr != NULL)
{
if (i == 0)
strcat(nodo, ptr);
if (i == 2)
strcat(temp, ptr);
if (i == 4)
strcat(hr, ptr);
if (i == 6)
strcat(dw, ptr);
if (i == 8)
strcat(vcc, ptr);

ptr = strtok(NULL, "Nodo_,=:V()");
i++;
}
printf("Results: %s, %s, %s, %s, %s\n", nodo, temp, hr, dw, vcc);
fprintf(ft,"%s,%s,%s,%s,%s\n", nodo, temp, hr, dw, vcc);

fclose(ft);
memset(nodo, 0, sizeof(nodo));
memset(temp, 0, sizeof(temp));
memset(hr, 0, sizeof(hr));
memset(dw, 0, sizeof(dw));
memset(vcc, 0, sizeof(vcc));
printf("\n");
}
}

最佳答案

发布的代码无法编译(我猜缺少的 } 在最后),但我可以指出一些问题:

  1. 你没有在阅读后终止 buff,所以 strchr 和/或 strtok 可以结束
  2. 您将 strcat 放入固定大小的缓冲区,而不检查您正在复制的内容是否适合。您可以在此处轻松注销缓冲区的末尾
  3. fclose(ft) 多次。您必须只在循环外执行一次

您应该修复这三个问题,如果仍有错误,请发布您的新可编译代码。

关于c - glibc 检测到双重释放或损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17162502/

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