Actuellement, j'ai le code suivant ci-dessous. char **arr
est initialement défini sur NULL
. alors il stocke dans les mots tout en lisant d'un dossier. Je ai juste choisi au hasard un grand nombre comme 5000
parce que je ne comprends pas comment faire malloc
affaires correctement, même après avoir regardé en ligne et en essayant d'apprendre.Comment correctement malloc et gratuit char ** lors de la lecture à partir du fichier (longueur inconnue)?
Aussi, lorsque je tente de free
char **arr
(la dernière partie de mon code), parfois je me segmentation faults
, parfois abort traps
, etc. Si quelqu'un pouvait me montrer comment faire quelque chose comme ça bien qui serait très apprécié! Merci!
char **arr = NULL
File *fp = fopen("file.txt", "r")
char string[3000];
char counter = 0;
//to store
while(fscanf(fp, "%s", string)!=EOF){
arr = realloc(arr, 5000); //arbitrarily used a large number like 5000
arr[counter] = malloc(5000);
strcpy(arr[counter++], string);
}
//to free
for(i=0; i<counter; i++){
free(arr[i])
}
free(arr);
Copie possible de [Comment puis-je obtenir la taille d'un fichier en C?] (Https://stackoverflow.com/questions/238603/how-can-i-get-a-files-size-in-c) –
Compilez avec toutes les informations d'avertissement et de débogage: 'gcc -Wall -Wextra -g' avec [GCC] (http://gcc.gnu.org/), puis ** utilisez le débogueur **' gdb' et [valgrind] (http://valgrind.org/). Lisez aussi la documentation de [malloc] (http://man7.org/linux/man-pages/man3/malloc.3.html) et des informations connexes –
Veuillez fournir quelques explications à [MCVE]. Votre question fix-my-code est hors sujet –