C 从指针结构打印成员

C 从指针结构打印成员,c,function,pointers,struct,C,Function,Pointers,Struct,我有一个这样的结构 typedef struct Thing{ int att; } Thing; Thing *newThing(){ Thing *t; t = (Thing *)(malloc(sizeof(Thing))); thing->att = 0; return t; } 我有一个printThing函数,它尝试打印att中的值,如下所示: void printThing(Thing *t){ printf("%d", t

我有一个这样的结构

typedef struct Thing{
    int att;
} Thing;

Thing *newThing(){
    Thing *t;
    t = (Thing *)(malloc(sizeof(Thing)));
    thing->att = 0;
    return t;
}
我有一个printThing函数,它尝试打印att中的值,如下所示:

void printThing(Thing *t){
    printf("%d", t->att);
}
然而,这会导致分割错误,但我可以用同样的方法打印正确的值。我做错了什么

int main(){
    Thing *t1 = readThing();//This works
    printf("%d", t1->att); //This also works
    printThing(t1); //Segmentation fault

    return 0;
}

问题可能在这里:

Thing *newThing(){
    Thing *t;
    t = (Thing *)(malloc(sizeof(Thing)));
    thing->att = 0;
    return t;
}

因为你动态地分配内存,让
t
指向它,但是你做了
thing->att=0和非
t->att=0,这是您应该做的。

如何为结构分配内存?请给出一个最小的完整示例!如果第一个
printf()这篇文章仍然缺乏一套清晰的代码来展示问题-只是一些片段。是的,大家都看到了!除非使用非C编译器,否则我预计会出现编译错误。如果在@chux中未显示的某个地方声明了
thing
,则不会出现编译错误。YaaSuka,你也会看到的,我刚才看到了编辑!;)是,但代码正在打印未分配的成员。即使是UB,我也希望随机打印数据,而不是seg故障。嗯,UB是UB,OP的帖子仍然不完整,其真实性受到质疑。