【问题标题】:Printing a member from a pointer struct从指针结构打印成员
【发布时间】:2017-10-05 02:20:10
【问题描述】:

我有一个这样的结构

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;
}

【问题讨论】:

  • 如何为结构分配内存?给出一个最小的完整示例!
  • 如果第一个 printf() 有效,是的。
  • @gsamaras 编辑显示内存是如何分配的。
  • 对于初学者,您应该检查malloc() 是否在newThing() 中返回了一个空指针。
  • printThing(t1); 中使用之前是否声明/定义了 printThing() 这篇文章仍然缺少一组明确的代码来展示问题 - 只是 sn-ps。

标签: c function pointers struct


【解决方案1】:

问题可能出在这里:

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

因为您动态分配内存并使t 指向它,但您应该使用thing->att = 0; 而不是t->att = 0;

【讨论】:

  • 是啊,很好看!
  • 我预计会出现编译错误,除非使用非 C 编译器。
  • 如果thing 在此处未显示的某处声明@chux,则不会。 YaaSuka,你也会看到的,我刚刚看到了编辑! ;)
  • 是的,但代码正在打印未分配的成员。即使是 UB,我也希望随机打印数据而不是段错误。 UB 是 UB,OP 的帖子仍然不完整,其真实性值得怀疑。
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
相关资源
最近更新 更多