c size_t 变量未设置为零?

c size_t variable not being set to zero?

我试图将 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;
}

您正在为 init_sack 本地的 Sack *sack 分配内存,一旦函数 returned

,这个局部变量就会丢失

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

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

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

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);