У меня есть это:бесплатно() массив гольца **
struct Library {
char letter;
int capacity;
int size;
char** words;
};
typedef struct Library Lib;
Инициализировать массив библиотеки:
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);
}
}
Здесь я заселить массив 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);
}
и такая функция:
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;
}
Я получил размер моего массива в своей структуре, чтобы получить предел моего массива, и освободил все используемые ячейки, но каждый раз, когда я вызываю CleanDico
, код падает. Какие-либо предложения?
Я уже спросил a question on a problem with a char array. Теперь я хочу free()
массив. Я читал много сообщений здесь и там и тестировал множество решений, но ни один из них не помог мне решить мою проблему.
Я получаю SEGMENTATION_FAULT на CleanDico
, и у меня нет никакой другой информации об ошибке. Отладочный мод по коду :: Блоки с ошибками.
Здесь необходимо [MCVE]. Код, который вы видите, выглядит хорошо, проблема, скорее всего, в коде, который вы не показывали. –
В какой строке он падает? Что такое сообщение? – nicomp
Вам необходимо разместить MCVE.Ошибки 'malloc' трудно отследить, и часто ошибки происходят в местах кода, не связанных с ошибками. Я предлагаю использовать инструмент, например 'valgrind', чтобы помочь найти источник ваших проблем. (В частности, вы никогда не показываете нам, где вы/выделяете/строки в словах. Кроме того, вы используете тот же индекс в своем внутреннем цикле, что и во внешнем ...) – BadZen