0
typedef struct A A;
typedef struct A* AList;
struct A{
char* name;
AList *next;
};
AList create(char *name)
{
AList new = (AList)malloc(sizeof(AList));
new->name = name;
new->next = NULL;
return new;
}
void add(char* name, AList *aList)
{
AList list = *aList;
if (list == NULL)
{
list = create(name);
*aList = list;
}
else
{
while (list->next != NULL)
list = list->next;
list->next = create(name);
}
}
こんにちは!これは私が困っているコードです。すべて正常に動作しますが、コードの最後の2行では "incomaptible pointer typeからの割り当て"しか得られません。理由はわかりません。ポインタが互換性のある型に変更された場合(私の意見では、list = * list-> next;)、セグメンテーション違反が発生します。これをどうすれば解決できますか?助けを おかげで、 ムコCのリンクリスト/ポインタ
私はあなたの 'AList'型エイリアスのようなポインタ型のエイリアスを作成することをお勧めしません。なぜなら、それがポインタであることを忘れてしまい、誤ってあなたのように'next'構造体メンバでやるか、または間違ったサイズを割り当てることです。 –
ポインタを 'typedef'エイリアスに隠さないようにしてください。あなたの' create'関数が間違っています。あなたは 'A *'である 'AList'のためのスペースを割り当てますが、' struct A'のためのスペースを割り当てるべきです。 – Holt
私はコードの純真ではありませんが、このように見栄えが良くないのですか?そして、私はAのメモリを割り当てるべきですが、A *を返すべきです。 AList new =(AList)malloc(sizeof(A)); ? – Muco