J'essaie d'entrer un caractère à la fois pour chaque bloc par ligne, mais ce qui se passe est que la dernière ligne écrasera le contenu précédent que j'ai stocké dans la rangée précédente. En fin de compte, toutes mes lignes ont le même contenu .. Quelqu'un peut-il expliquer ce que je fais mal?Pourquoi mon double pointeur écrase-t-il ses lignes?
#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;
}
Qu'est-ce qui se passe avec le 'free (this [i])' après l'allocation? Votre utilisation de l'un des pointeurs après cela est un comportement indéfini. –
Je sais que chaque fois que je l'alloue, je dois le libérer afin que je puisse toujours réutiliser l'espace? mais je ne sais pas vraiment où je devrais le libérer. –
Vous libérez la mémoire quand vous avez fini avec elle. Si vous essayez d'utiliser la mémoire allouée (et l'objet pointeur aussi) après libre, c'est un comportement indéfini. –