使用结构实例指针取消引用结构实例元素

时间:2016-07-20 09:24:00

标签: c pointers struct

我有这个功能:

static pair_t * // not visible outside this file
pair_new(const int key)
{

  pair_t *pair = malloc(sizeof(pair_t));

  if (pair == NULL) {
    // error allocating memory for pair; return error
    return NULL;
  } else {


            printf("key is %d\n",key);

      *(pair->key) = key;
      *(pair->count) = 1;
      pair->next = NULL;
      return pair;

  }
}

但我试图取消引用对实例的关键元素的方式是给我一个seg错误。我认为这是因为'pair'是指针。

对结构定义如下:

typedef struct pair {
  int *key;                // search key for this item
  int *count;                  // pointer to data for this item
  struct pair *next;   // children
} pair_t;

有关如何正确更改key值的任何建议都将非常感谢

1 个答案:

答案 0 :(得分:3)

不,pair没有问题,key(以及count也是如此)。指针未初始化使用,调用undefined behavior

您正在尝试取消引用key

 *(pair->key) = key;

没有为key分配有效内存,因此取消引用会调用UB。您需要先将内存分配给key,然后才能使用它。同样适用于count