gpt4 book ai didi

c - 为什么我的双指针会覆盖其行?

转载 作者:行者123 更新时间:2023-11-30 20:10:44 25 4
gpt4 key购买 nike

我试图一次向每行的每个 block 输入一个字符,但发生的情况是最新行将覆盖我存储在前一行中的先前内容。最后,我的所有行都有相同的内容。有人可以解释我做错了什么吗?

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

int main()
{
int row=0,col=0,i;
char c;
char **this=NULL;

this=calloc(64,sizeof(char*));


for(i=0;i<64;++i)
{
this[i]=calloc(5,sizeof(char));
free(this[i]);
}

while(c!=EOF)
{
c=getchar();
if(!isspace(c)&&isprint(c))
{
if(c==',')
{
this[row][col]='\0';
row++;
col=0;
}
else if(c=='.')
{
this[row][col]=c;
this[row][col+1]='\0';
}
else
{
this[row][col]=c;
//printf("%d,%d\n",row, col);
//printf("%c\n",this[row][col]);
//printf("%s\n",this[row]);
//printf("%s\n",this[row+1]);
col++;
}
}
}
printf("string0:%s\n",this[0]);//prints the same thing
printf("string1:%s\n",this[1]);

free(this);
return 0;
}

最佳答案

在您的代码中,在calloc()之后,您立即执行

 free(this[i]);

将内存标记为已释放(即不再使用)。然后,稍后您尝试使用该内存,它会导致 undefined behavior .

使用完内存后,您必须释放它。对单个 this[i] 调用 free() 的好时机就在

之前
  free(this);

打电话。

关于c - 为什么我的双指针会覆盖其行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43607208/

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