C 初始化堆栈时出现分段错误

C 初始化堆栈时出现分段错误,c,C,当试图将top赋值为NULL时,它会给我带来分段错误,有什么想法吗? 它与匿名结构有关吗 typedef struct stack { struct stack *ptr; char* data; }*tStack; typedef struct{ tStack top; }*tStack_ptr; void Sinit(tStack_ptr s) { s->top = NULL; } int main() { //stack tSt

当试图将top赋值为NULL时,它会给我带来分段错误,有什么想法吗? 它与匿名结构有关吗

typedef struct stack
{
    struct stack *ptr;
    char* data; 
}*tStack;

typedef struct{
    tStack top;
}*tStack_ptr;

void Sinit(tStack_ptr s)
{
    s->top = NULL;
}

int main() {
    //stack
    tStack_ptr s;

    Sinit(s);

return 1;
}
变量“s”只是指向结构{tStack*top}的指针,系统不会将任何内存分配给它所指向的结构

在32位PC上,s在内存中占用4个字节,与“int*”等其他指针相同

您可以这样定义tStack_ptr:

tStack_ptr s;  

这只是解决了段错误,sturct tStack,我不确定你想要什么。

s是一个未初始化的指针。你必须让他指向一些有效的内存;结构foo*ptr;ptr->bar=42;您正在取消对未初始化指针的引用。通常,将指针隐藏在typedef后面是个坏主意。
typedef struct{
    tStack top;
}tStack_ptr;