je ceci:libre() un tableau de char **
struct Library {
char letter;
int capacity;
int size;
char** words;
};
typedef struct Library Lib;
Initialiser le tableau de la bibliothèque:
void InitLibrary(Program* startup) {
char alphabet[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
startup->dictionary = malloc(sizeof(Lib) * 26);
int i;
for (i = 0; i < 26; i++) {
startup->dictionary[i].letter = alphabet[i];
startup->dictionary[i].capacity = INIT_CAPACITY;
startup->dictionary[i].size = 0;
startup->dictionary[i].words = malloc(sizeof(char*) * startup->dictionary[i].capacity);
}
}
Ici je remplir le tableau words
:
void FillDicoFromFile(Program* startup){
while((!feof(startup->f) && !ferror(startup->f))){
char* word = malloc(sizeof(char) * 30);
fscanf(startup->f, "%s", word);
ToLowerCase(word);
int indexLib = word[0] - 97;
int sizeLib = startup->dictionary[indexLib].size;
startup->dictionary[indexLib].words[sizeLib] = word;
startup->dictionary[indexLib].size++;
}
CountTotalWords(startup);
rewind(startup->f);
}
et une fonction comme celle-ci:
void CleanDico(Program* startup){
int i = 0;
for(; i < startup->dictionary[i].size; i++){
int j = 0;
for(; j < startup->dictionary[i].size; i++){
free(startup->dictionary[i].words[j]);
startup->dictionary[i].words[j] = NULL;
}
startup->dictionary[i].size = 0;
}
startup->totalWords = 0;
}
J'ai obtenu la taille de mon tableau sur ma structure pour obtenir la limite de mon tableau, et libéré toutes les cellules utilisées, mais chaque fois que j'appelle CleanDico
, le code se bloque. Aucune suggestion?
J'ai déjà demandé a question on a problem with a char array. Maintenant, je veux free()
le tableau. J'ai lu beaucoup de posts ici et là et testé beaucoup de solutions mais aucune m'a aidé à résoudre mon problème.
Je reçois un SEGMENTATION_FAULT sur CleanDico
, et je n'ai pas d'autres informations sur l'erreur. Déboguer mod sur Code :: Blocks sont pauvres avec des messages d'erreur.
Nous avons besoin d'un [MCVE] ici. Le code que vous avez ici semble correct, le problème est probablement dans le code que vous n'avez pas montré. –
Sur quelle ligne se plante-t-il? Quel est le message? – nicomp
Vous devez publier un MCVE.Les bogues de 'malloc' sont difficiles à traquer et souvent les erreurs se produisent dans des endroits du code sans rapport avec l'endroit où se trouvent les bogues. Je suggère d'utiliser un outil comme 'valgrind' pour vous aider à trouver la source de vos problèmes. (En particulier, vous ne nous montrez jamais où vous/allouer/les chaînes dans 'words' .Vous utilisez également le même index dans votre boucle intérieure comme dans l'extérieur ...) – BadZen