我只是想在 c 中使用单独的函数初始化一个结构数组,但是当我调用该函数时,它会导致程序由于段错误而崩溃。
我想要做的就是初始化值并使用大小为 na 常数为 20 的循环将 pos = 设置为 k+1 任何人都可以提供帮助,也许他们是我完全缺少的东西,谢谢。
代码:
#include <stdio.h>
#define n 20
typedef struct history {
char* value;
int pos;
} hist;
hist* history_struct[n];
void init_struct() {
/* this function will create an array of structs of size 20*/
for (int k = 0; k < n; k++) {
history_struct[k]->value = (hist*) malloc(sizeof(hist*));
history_struct[k]->pos = k+1;
printf("indexes = %d ", history_struct[k]->pos);
}
}
答案 0 :(得分:3)
我相信您已经声明了一个指向结构的指针数组,简单的代码清理将使您从您似乎拥有的空指针中脱颖而出。如果 value 只是一个 char*,您也可以以一种奇怪的方式使用 malloc,然后只需使用 sizeof(char*)
并且无需强制转换
hist history_struct[n];
void init_struct() {
/* this function will create an array of structs of size 20*/
for (int k = 0; k < n; k++) {
history_struct[k].value = malloc(sizeof(char*));
history_struct[k].pos = k+1;
printf("indexes = %d ", history_struct[k].pos);
}
}
所以我们删除了指针然后意味着我们回到了点符号而不是“->”,因为我们不再使用指针希望这有助于解决您的问题,任何进一步的问题都可以问我