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