我正在尝试将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;
}
答案 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的调用函数中可以访问已分配的指针值