void struct_tokens(struct Words **w_count, int size)
{
*w_count = (struct Words*)calloc(size, sizeof(struct Words));
char *temp;
int n = 0;
int i = 0;
printf("Value 1: %s\n", (*w_count[0]).word);
printf("Value 2: %s\n", (*w_count[1]).word);
}
我的结构看起来像这样:
struct Words
{
char word[20];
unsigned int count;
};
一旦我访问数组中的下一个元素,它就会崩溃,因此访问w_count [0]但它无法访问w_count [1]而不会崩溃。因此,值1打印到控制台,但值2不打印,为什么会这样?
答案 0 :(得分:1)
calloc
来电是错误的 - 它将是
*w_count = calloc(size, sizeof(struct Words));
访问结构的实例将是
printf("Value 1: %s\n", (*w_count)[0].word);
[]
的{{3}}高于*
。在早期的案例中,您有未定义的行为(导致崩溃)。
另请注意,分配的内存将使用0
进行初始化。因此,char数组将只包含\0
以外的任何内容 - 在printf
中使用时不会打印任何内容。
几点:
void*
到struct Words *
转换是隐式完成的 - 您无需进行转换。
检查calloc
的返回值,以防它返回NULL
您应该正确处理它。
使用完毕后释放动态分配的内存。 (使用free()
)。
代码明确calloc
的正确代码如下: -
*w_count = calloc(size, sizeof(struct Words));
if( *w_count == NULL ){
perror("calloc");
exit(EXIT_FAILURE);
}