リンクリストとポインタで作業しています。ここには、プッシュ機能を含む簡単なコードがあります。要素をプッシュし、最初のメンバを印刷しようとすると、実行時に実行されたコードがクラッシュします。しかし、同じポインタをprint_list関数に渡して、printf関数をprint_listの中に適用すると、正常に動作します。しかし、それをmain関数で直接使用し、printf関数を適用するとクラッシュします。実行時にリンクされたリストを印刷するCプログラミングエラー、実行されたコードがクラッシュする
#include<stdio.h>
#include<stdlib.h>
typedef struct list{
int order;
struct list *next;
}list;
void push(struct list **arg,int i);
int main()
{
struct list **ptr=NULL;
for(int i=0;i<10;++i){
push(&ptr,i);
}
print_list(&ptr); // Here works fine
printf("%d\n", (*ptr)->order); //Here run time error
return 0;
}
void push(struct list **arg,int i){
struct list *temp;
temp= malloc(sizeof(list));
temp->order=i;
temp->next=*arg;
*arg=temp;
}
void print_list(list ** head) {
while ((*head) != NULL) {
printf("%d\n", (*head)->order); //Here works fine too !
*head = (*head)->next;
}
}
'list'は' ** 'ですが、'& 'でそれを渡すので、"受信者 "は実際に' *** 'を得ています - 3つ星のプログラマーは良いことではありません;-) – John3136