c size_t变量未设置为零?

use*_*850 -1 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;
Run Code Online (Sandbox Code Playgroud)

这是代码:

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

mel*_*ene 5

init_sack类型和名称来看,看起来它应该只是初始化现有的Sack,而不是分配一个新的.

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

void init_sack(Sack *sack) {
  sack->elements = NULL;
  sack->total_elements = 0;
}
Run Code Online (Sandbox Code Playgroud)

呼叫为:

Sack sack;
init_sack(&sack);
Run Code Online (Sandbox Code Playgroud)

要么:

Sack *sack = malloc(sizeof *sack);
if (!sack) handle_error_somehow(...);
init_sack(sack);
Run Code Online (Sandbox Code Playgroud)