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。
#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。