访问struct数组中的下一个元素时,C程序崩溃

时间:2018-02-17 16:10:12

标签: c pointers crash

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不打印,为什么会这样?

1 个答案:

答案 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);
    }