【问题标题】:C struct->struct->struct->element (usual) segmentation faultC struct->struct->struct->element(通常)分段错误
【发布时间】:2012-12-22 08:24:32
【问题描述】:

这是一件奇怪的事情:

我有一个结构,它包含指向相同类型结构的指针和指向其他类型结构的指针,以及其他一些值。

struct animal {
    struct animal * father;
    struct race * rc;
    int age;
};

struct race {
    char colour;
};

当我通过父亲访问价值时代时,一切似乎都很好:

animal->father->age

但是当我尝试访问父亲种族的颜色时:

animal->father->rc->colour

我得到“分段错误”。但是,如果每次都发生,那就太容易了。它有时会,有时会不起作用,我不知道是什么因素使它不稳定。另一件总是有效的事情是:

animal->rc->colour

是否有可能您最多可以连接两个指针,然后可能会出现问题? 我使用最新的 gcc。

【问题讨论】:

  • 您可能没有为animal->father->rc 正确分配内存,但如果不查看实际代码则无法判断。
  • 很可能您忘记为结构分配内存,或者您没有初始化指向该结构的指针。
  • 您确定animal->father->rc 不为空吗?无论如何...一般建议是使用valgrind 对其进行分析,然后使用gdb 运行它并观察发生了什么
  • 有一个工具叫 valgrind(假设你使用的是 unix 之类的环境),它可以帮助你可视化问题出在哪里。
  • 也许你有时会错过分配父亲

标签: c pointers struct segmentation-fault


【解决方案1】:

如果它有时可以正常工作而有时不能正常工作,则几乎可以肯定问题出在内存分配上。如果您可以从声明中直接发布您如何分配值,您应该很快就能在此处获得帮助。

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 2016-07-16
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2011-02-13
    • 2020-02-28
    • 2017-04-19
    • 1970-01-01
    相关资源
    最近更新 更多