charの配列:無料()私はこれを持っている**
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()
したいです。私はここにたくさんの投稿を読んでいて、多くのソリューションをテストしましたが、私の問題を解決するのには役に立たなかったのです。
私はCleanDico
にSEGMENTATION_FAULTを取得し、私は、エラーに関する他の情報を持っていません。 Code on Debug ::ブロックのエラーメッセージが悪い
ここに[MCVE]が必要です。ここでシェービングしたコードは問題なく表示されますが、問題は表示されなかったコードの可能性が高いです。 –
クラッシュする行は何ですか?メッセージは何ですか? – nicomp
MCVEを投稿する必要があります。'malloc'バグは追跡が難しく、多くの場合、バグがどこにあるかに無関係にコード内の場所でエラーが発生します。 'valgrind'のようなツールを使って問題の原因を見つけるのを助けることをお勧めします。 (特に、あなたは/ words/'words 'に文字列をどこに配置するかはわかりませんが、外側のものと同じようにインデックスを使用しています...) – BadZen