コードを数え、私はこれを実行すると、私はコードリンクリストCの基本的な例は、常にセグメンテーションフォールトをスロー
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: index.c
* Author: nikos
*
* Created on May 6, 2016, 9:19 AM
*/
#include <stdio.h>
#include <stdlib.h>
/*
*
*/
struct people {
int age;
char *name;
struct people * next;
};
typedef struct people people;
void count(people person) {
people *current;
people *next;
current = &person;
next = person.next;
int count = 1;
while (current) {
printf("age : %d\n", current->age);
printf("name : %s\n", current->name);
count++;
current = next;
if (next->next != NULL) {
next = next->next;
} else {
next = NULL;
}
}
printf("%d\n", count);
}
int main(int argc, char** argv) {
people person = {
.name = "nikos",
.age = 25
};
person.next = malloc(sizeof (people));
person.next->age = 26;
person.next->name = "test";
person.next->next = NULL;
count(person);
return 0;
}
を以下していることは、ループを実行し、リストの内容を出力しますが、それはセグメンテーションフォルトを与えるヌル当たったとき。
なぜ私には何かが間違っているように見えません。
これは基本的なロジックで、次の内容をチェックします。ヌルであればループを止め、もう一度ステップを続けます。
あなたのコードには明確なロジックがありませんが、確かに理解できる*ですが、明確ではありません。 'while'ループの代わりに' for(current =&person; current!= NULL; current = current-> next){printf()...} 'を使用すると、問題は引き続き発生します。 –
ループの2番目の反復では、 'next'はNULLですが、' next-> next'を使って逆参照します。 –
@IgorTandetnikそれは私が言っていることです、それはそのような単純な作業のために複雑です。 –