入力ファイルからどれくらいのメモリを割り当てるべきかを読んでいる間、構造体の配列(子)のためにメモリを割り当てようとしています。これを行う最も賢い方法は何か分かりません。私の構造体:fgets内のstructの配列のメモリを割り当てよう
typedef struct sNaryNode {
void* data; // point to each nodes data
unsigned int n; // the number of children
struct sNaryNode **child; // the child list
} NaryNode;
typedef struct {
char *name;
unsigned int utility; // -1, 0, 1
unsigned int probability; // 0-1
} Child;
typedef struct {
unsigned int level;
unsigned int player;
unsigned int nChildren;
Child *children; // The array of structs I am trying to allocate memory to.
} Data;
私は次のことを試してみました:
void readData(Data *node) {
FILE *input_file = fopen("data.csv", "r");
if(input_file == NULL) printf("Could not open file\n");
else {
char buf[80];
int n = 0;
while(fgets(buf, 80, input_file)!= NULL) {
// allocate space for new data
Data *node = (Data*)calloc(1, sizeof(Data));
sscanf(buf, " %u, %u, %u, ", &node->level, &node->player, &node->nChildren);
node->children = calloc(node->nChildren, sizeof *node->children);
sscanf(buf, "%u, %u, %s ", &node->children[n].utility, &node->children[n].probability, node->children[n].name);
n++;
}
fclose(input_file);
}
}
int main(void) {
Data *node;
readData(node);
}
それは私が間違ってメモリ割り当てとは何かを持っている期待してセグメンテーションフォールトになります。私は読んでい
ファイル:
level, player, nChildren, utility, probability, name
1, 1, 2, 1 0, 0.50 0.50, "Kom med det første tilbud (anchor)" "Afvent modspilleren kommer med første tilbud"
2, 2, 2, 1 0, 0.50 0.50, "Kom med lavt modtilbud (anchor)"
2, 2, 2, 1 0, 0.50 0.50, "Kom med det første tilbud "anchor"
EDIT:GDBは、セグメンテーションフォルトがて、readDataにおける第二のsscanfラインから来ていることを私に伝えます。まだ原因を突き止めている。
既に与えられた答えを理解できないようにする方法で質問を変更しないでください: -/ – alk