为什么我的输出是empty,链栈不是加了1了吗



#include<stdio.h>
#include<stdlib.h>
#define maxsize 11

typedef struct Stacklink{
    int data;
    struct Stacklink* next;
}stacklink;

void pushlink(stacklink* s, int x);
void readlink(stacklink* s);
int main() {

    stacklink* head=NULL;
    pushlink(head, 1);
    readlink(head);
    return 0;
}


void pushlink(stacklink* s, int x) {
    stacklink* p;
    p = (stacklink*)malloc(sizeof(stacklink));
    p->data = x;
    if (s == NULL) { p->next = NULL; }
    else { p->next = s; }
    s = p;
}
void readlink(stacklink* s) {
    if (s == NULL) { printf("erro:empty"); return; }
    else {
        stacklink* p=s;
        while (p != NULL) {
            printf("%d\n", p->data);
            p = p->next;
        }
    }
}


```

加一句s= (stacklink*)malloc(sizeof(stacklink));

#include<stdio.h>
#include<stdlib.h>
#define maxsize 11
typedef struct Stacklink {
    int data;
    struct Stacklink* next;
} stacklink;
void pushlink(stacklink* s, int x);
void readlink(stacklink* s);
int main() {
    stacklink* head=NULL;
    pushlink(head, 1);
    readlink(head);
    return 0;
}

void pushlink(stacklink* s, int x) {
    stacklink* p;
    p = (stacklink*)malloc(sizeof(stacklink));
    p->data = x;
    if (s == NULL) {
        p->next = NULL;
    }
    else {
        p->next = s;
    }
    s = p;
}
void readlink(stacklink* s)
{
    s=(stacklink*)malloc(sizeof(stacklink));
    if (s == NULL) {
        printf("erro:empty");
        return;
    }
    else {
        stacklink* p=s;
        while (p != NULL) {
            printf("%d\n", p->data);
            p = p->next;
        }
    }
}