私は K&R 本 (#6.3) の問題に取り組んでおり、ユーザーが一連の単語を入力すると、これらの単語のリストを、各単語が表示される行と共に作成する必要があります。それは構造を含むはずなので、これらは私が今持っているものです:
struct entry {
int line;
int count;
struct entry *next;
};
struct word {
char *str;
struct entry *lines;
struct word *next;
};
static struct word *wordlist = NULL; // GLOBAL WORDLIST
しかし、何かを入力して、プログラムが新しいエントリを構造 (リンクされたリストのようなもの) に追加しようとすると、問題が発生し、プログラムはエラー メッセージなしで終了します。そのためのコード:
void add_entry(char *word, int line)
{
if (word == NULL || line <= 0 || is_blocked_word(word))
return;
struct word *w;
for (w = wordlist; w != NULL && w->next != NULL && !strcmp(w->str, word); w = w->next);
// If word is found in the wordlist, then update the entry
if (w != NULL) {
struct entry *v;
for (v = w->lines; v != NULL && v->next != NULL && v->line != line; v = v->next);
if (v == NULL) {
struct entry *new = (struct entry*) malloc(sizeof(struct entry));
new->line = line;
new->count = 1;
new->next = NULL;
if (w->lines == NULL)
w->lines = new;
else
v->next = new;
}
else v->count++;
}
// If word is not found in the word list, then create a new entry for it
else {
struct word *new = (struct word*) malloc(sizeof(struct word));
new->lines = (struct entry*) malloc(sizeof(struct entry));
new->next = NULL;
new->str = (char*) malloc(sizeof(char) * strlen(word));
new->lines->line = line;
new->lines->count = 1;
new->lines->next = NULL;
strcpy(new->str, word);
// If the word list is empty, then populate head first before populating the "next" entry
if (wordlist == NULL)
wordlist = new;
else
w->next = new;
}
}
に最初の単語を追加しただけでも、プログラムは終了しwordlist
ます。これは、私が malloc した有効な構造へのポインターが含まれているif (wordlist == NULL) wordlist = new;
場所を示す行にあります。new
これはどのように可能ですか?
私の知る限り、それは私のポインターの使用法に問題がありますが、正確にどこにあるのかわかりません。誰か助けてくれませんか?