デスクトップ上の.txtファイルからいくつかの単語を含む単一のリンクリストを作成しようとしましたが、ターミナルで実行すると、セグメンテーション違反が発生します。後でXcodeでコードをコンパイルして実行すると、次のエラーメッセージが表示されます。 スレッド1:EXC_BAD_ACCESS(コード= 1、アドレス= 0x7fff5fc00000) 私は初心者です。ありがとう!私のCプログラムでいくつかの助けが必要ですが、私はセグメンテーションフォルトを持っていますが、理由はわかりません
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct word{
int num;
char word[50];
struct word *next;
} Word;
#define len sizeof(Word)
Word *create();
void print(Word *head);
int main()
{
Word *head;
head = create();
print(head);
return 0;
}
Word *create()
{
Word *head, *p1, *p2;
char word[50], c;
int i = 0;
FILE *fp = fopen("/Users/apple/Desktop/words", "r");
head = p1 = p2 = NULL;
while(fp != NULL){
i = 0;
p1 = (Word *)malloc(len);
//get the English word
while((c = fgetc(fp)) != '\n'){
word[i++] = c;
}
word[i] = '\0';
strcpy(p1->word, word);
p1->next = NULL;
if(head == NULL){
head = p1;
p2 = p1;
} else {
p2->next = p1;
p2 = p1;
}
p1 = p1->next;
}
return head;
}
void print(Word *head)
{
Word *p = head;
while(p != NULL){
printf("%s\n", p->word);
p = p->next;
}
}
そして、これは.txtファイルの内容です:
ようこそ。私は非常にデバッガを使用する方法を学ぶいくつかの時間を過ごすことをお勧めします。それがあなたの問題を理解するための第一歩です。 – OldProgrammer
[小さなプログラム(Eric Lippert)のデバッグ方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)をお読みください。 SOはデバッグサービスではありません。問題を突き止めたら、*なぜ*問題なのかを理解していなければ、どうしても質問をしてください。 – StoryTeller
デバッガを使用して動作中のクラッシュをキャッチすることから、コード内のどこに* *があるかを特定します。次に、デバッガを使っている間に、関係するすべての変数の値を調べて、それらが正常に見えることを確認します。少なくとも、私たちにその情報(場所と価値)を教えてください。 –