为什么使用指针访问的结构体成员没有得到更新?

问题描述 投票:0回答:1

我正在写的代码中有很多结构体,但由于某些原因,结构体成员的值没有得到更新。我绞尽脑汁想了很久,却找不到原因。我在这里创建了一个类似的代码,最后这一行没有任何作用。

star->state.county.street->pondType = TYPE_SQUARE

pondType仍然是 "TYPE_NONE"。谁能解释一下我到底做错了什么...谢谢!

int main()
{
  typedef enum
  {
      TYPE_NONE     = 0,
      TYPE_SQUARE   = 1,
      TYPE_ROUND    = 2,
  } PondType_t;

  typedef struct
  {
      PondType_t pondType;
  } Street_t;

  typedef enum
  {
      IDX_1 = 0,
      IDX_2 = 1,
      IDX_3 = 2,
      MAX_ID_COUNT = 3
  } CompanyID_t;

  typedef struct Company_s
  {
      const CompanyID_t id;
      volatile Street_t *street;
  } Company_t;

  Company_t companies[MAX_ID_COUNT] =
      {
          { .id = IDX_1 },
          { .id = IDX_2 },
          { .id = IDX_3 },
      };

  Company_t *star = &companies[IDX_1];
  star->street->pondType = TYPE_SQUARE;

  return 0;
}

c pointers struct
1个回答
3
投票

如果这是完整的代码,那么你的 street 成员指向内存的某个随机区域。确保指针指向的目标确实存在。比如说:

Street_t street = { 0, TYPE_NONE };
//...
star->state.county.street = &street;
//...
star->state.county.street->pondType = TYPE_SQUARE;
© www.soinside.com 2019 - 2024. All rights reserved.