c size_t变量未设置为零?

时间:2017-05-11 04:36:46

标签: c struct size-t

我正在尝试将total_elements设置为0,但最终会给我一个随机的大数字。我对为什么会发生这种情况感到非常困惑。这是我的结构:

typedef struct sack {
  Element *elements;
  size_t total_elements;
} Sack;

typedef struct element {
  char *name;
  int occurances;
  struct element *next;
} Element;

这是代码:

void init_sack(Sack *sack) {
  if(!(sack = calloc(1, sizeof(Sack)))) {
    return;
  }
  sack->elements = NULL;
  sack->total_elements = 0;
  return;
}

2 个答案:

答案 0 :(得分:5)

init_sack的类型和名称判断,看起来它应该只是初始化现有的Sack,而不是分配一个新的。{/ p>

在这种情况下,解决方案将是:

void init_sack(Sack *sack) {
  sack->elements = NULL;
  sack->total_elements = 0;
}

请致电:

Sack sack;
init_sack(&sack);

或:

Sack *sack = malloc(sizeof *sack);
if (!sack) handle_error_somehow(...);
init_sack(sack);

答案 1 :(得分:1)

你正在为sack * sack分配内存,这是init_sack的本地,一旦返回函数,这个局部变量就会丢失

您需要从init_sack返回sack或将其作为双指针传递给init_sack,以便在init_sack的调用函数中可以访问已分配的指针值