私はポインタをメインのリンクされたリストの私のアドレスに渡そうとしています。それをメモリに割り当てる関数に渡し、次のノードに移動します。ヘッドノードを壊す。リンクされたリストとポインタ
typedef struct {
int data;
struct node_list *next;
}node_list;
typedef struct {
struct node_list *head;
}list;
void insert_list(node_list **c, int num);
void main()
{
int num;
list *list_odd = (list*)calloc(1, sizeof(list));
node_list *c = &list_odd->head;
while (num != -1)
{
if (num % 2)
insert_list(c, num);
}
}
void insert_list(node_list **c, int num)
{
if (*c == NULL)
{
*c = (node_list*)malloc(sizeof(node_list)); // it allocates the memory in the right place.
(*c)->data = num;
(*c) = (*c)->next; // but this step breaks the starting list pointer
}
else
{
(*c)->next = (node_list*)malloc(sizeof(node_list));
(*c)->data = num;
(*c) = (*c)->next;
}
}
編集:私は明確にするために、自分自身を説明していないことがあります。私はそれにメモリを割り当てる一方で、リンクリストの先頭に私のリストポイント場合、次に行う(* C)=(* C) - >次に、私の頭はもはや乞食を指していません。私が達成しようとしているのは、リストの開始と次のノードの位置の保存です。
問題がありますか?もしそうなら、それは何ですか?そして、あなたがデバッガを踏んだときに何について知りましたか? –
@ Danzコンパイルでは、タイプnode_listとstruct node_listの互換性のないポインタが使用されているため、メッセージが発行されます。 –
私のリストがリンクリストの先頭を指していて、それにメモリを割り当ててから(* c)=(* c) - >次にすると、私の頭はもはや懇願を指摘しなくなります。私が達成しようとしているのは、リストの開始と次のノードの位置の保存です。 – Dannz