为什么这个基本的C程序会导致无限循环?

Chr*_*101 1 c linked-list infinite-loop

我的任务是构建一个"代表堆栈"的基本链表.因此,只能根据后进先出主体访问数据.我必须在"堆栈"上应用某些功能.我的代码编译得很好,但是执行时,它只是无限地打印1.我不知道这是怎么回事,因为我真的只使用一个while循环.有谁知道我的问题是什么?也许我将来如何防止这样的错误.感谢您的任何帮助.提前道歉,我是初学者!

    #include <stdio.h>
#include <stdlib.h>


typedef struct Stack {
    struct Stack *next;
    int data;
} Stack;

Stack* push(Stack*head, int d) {   //add a datapoint to the top of the stack
    Stack *temp;
    temp=malloc(sizeof(Stack));
    temp->data=d;
    temp->next=head;

    return temp;
}


Stack* pop(Stack*head) {      //read the top data point, and delete it
    Stack* newHead=head->next;
    printf("%i", head->data );
    free(head);
    return newHead;
}

int peek(Stack*head) {   // return the top datapoint, without delete
    return head->data;
}

void isempty(Stack*head) {     
    if (head==NULL) {
        printf("Stack empty");
    }

    printf("Stack has data");
}

void print(Stack*head) {    //print complete Stack
    Stack* cursor;
    cursor=head;

    while (cursor!=NULL) {
        printf("%i", cursor->data);
    }
}
int main(int argc, const char * argv[]) {
    Stack* head;
    head=malloc(sizeof(Stack));
    head=NULL;
    head=push(head, 4);
    head=push(head, 2);
    head=push(head, 1);
    printf("%i", peek(head));
    print(head);
    head=pop(head);
    print(head);
    isempty(head);
    head=pop(head);
    head=pop(head);
    isempty(head);


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

250*_*501 6

你没有增加cursor功能print:

    while (cursor!=NULL) {
        printf("%i", cursor->data);
   }
Run Code Online (Sandbox Code Playgroud)

代码也泄漏了内存:

head=malloc(sizeof(Stack));
head=NULL;
Run Code Online (Sandbox Code Playgroud)