我试图将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)
从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)