C 初始化堆栈时出现分段错误
当试图将top赋值为NULL时,它会给我带来分段错误,有什么想法吗? 它与匿名结构有关吗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
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;