C数组的结构问题

C array of struct issues

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct individual {
    char name[32];
    int stats[7];
    char role;
};

void create_array(struct individual **array){
    *array = malloc(sizeof(struct individual)); //allocate initial memory space
}

void resize_array(struct individual **array, unsigned char num) {
    printf("%d\n", *array);
    *array = realloc(*array, num * sizeof(struct individual));
    printf("%d\n", *array);
    printf("resize success\n");
}

void problem(struct individual **f_array, unsigned char *f_num) {
  *f_num = 2;

  printf("%d\n", *f_array);
  resize_array(f_array, *f_num);
  printf("%d\n", *f_array);
  strcpy(f_array[*f_num - 1]->name, "test value"); //CRASH LINE
}

int main() {

  unsigned char f_num = 0;
  struct individual *f_array;
  create_array(&f_array);

  problem(&f_array, &f_num);

}

此代码在标记为“CRASH LINE”的行上崩溃。虽然此处未显示,但执行相同的代码设置 (*f_num = 1) 不会导致错误。虽然 *f_array 本身传递(对问题代码进行适当更改)不会导致错误,但问题退出后给出的值会导致给出无意义的值,因为指针恢复到调整大小前的状态.任何帮助表示赞赏。

问题在于访问该值的线路。

该行应如下所示:

strcpy((*f_array)[*f_num - 1].name, "test value"); // doesn't crash any more :)

稍微分解一下:

  • f_array 是指向结构数组的指针,需要在索引之前取消引用它
  • [*f_num - 1] 访问数组的元素 1。