1
我有以下功能,它從串行設備讀取緩衝區,獲取一些令牌並每隔10秒打印這些令牌。我想要這些結果將它們保存在我在桌面上創建的data.txt中。在第一圈我有結果,也是我讓他們在txt文件,但第二次我有這樣的錯誤glibc檢測到雙免費或腐敗
***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");
}
}
你應該在debug中編譯並使用'gdb' /'valgrind'來跟蹤你的錯誤。 – BenC
您在while循環中關閉ft。如果下一次循環運行到fprintf(ft,...)ft將已經關閉。可能這會導致該消息= – urzeit
@urzeit是正確的。 'fclose()'被多次調用。 – devnull