Je ne suis pas familier avec C et j'essaye de trouver une allocation de mémoire dynamique pour la lecture d'un fichier. Au moins, je pense que c'est ce que je fais.Modifier un caractère * par pointeur dans une fonction donne un plantage
Quoi qu'il en soit, ce code fonctionne:
int readfromfile(FILE *filepointer)
{
size_t size = 2;
char *str = (char *) malloc(sizeof(char));
int character = 0;
size_t counter = 0;
while((character = fgetc(filepointer)) != EOF)
{
str = (char *) realloc(str, size);
str[counter] = (char) character;
size ++;
counter++;
}
str[counter] = '\0';
printf("+%s+", str);
free(str);
return 0;
}
Et ce code ne fonctionne pas:
int main()
{
char *str = (char *) malloc(sizeof(char));
...
readfromfile(ifpointer, &str);
}
int readfromfile(FILE *filepointer, char **str)
{
size_t size = 2;
int character = 0;
size_t counter = 0;
while((character = fgetc(filepointer)) != EOF)
{
*str = (char *) realloc(*str, size);
*str[counter] = (char) character;
size ++;
counter++;
}
str[counter] = '\0';
printf("+%s+", *str);
free(str);
return 0;
}
Je ne comprends pas pourquoi, parce que ce que je comprends que je envoie un pointeur vers l'emplacement le tableau char à la fonction et l'accès aux données à chaque fois. Les compilateurs ne montrent aucun message d'erreur, ils ne font que passer une boucle et la deuxième boucle se bloque après le realloc
à chaque fois. Le caractère affecté à la première valeur est également garbage. J'ai passé un certain temps à essayer de faire fonctionner cela et j'ai fait beaucoup de recherche, donc je m'excuse si j'ai manqué une solution, mais je suis vraiment bloqué à ce stade.
jamais jeté le résultat de malloc. – Magisch
Il réalloue la mémoire lorsqu'il ajoute plus de caractères, mais ne le fait pas? Et pour ce qui est de libérer de la mémoire, je m'excuse de vérifier qu'il a été libéré, édité maintenant. – JJJ
vous n'avez pas besoin d'ajouter une distribution pour 'malloc' –