当调用 init_model() 函数时,我尝试递归地遍历树并将指针附加到树节点指针数组中的最低树节点。但是,当我遍历列表并尝试打印它时,我遇到了段错误。
void rec_find_inputs(TreeNode* root, TreeNode** arr, int* len_arr) {
if (!(root->num_children)) {
arr = realloc(*arr, *len_arr * sizeof(TreeNode*));
arr[*len_arr] = root;
(*len_arr)++;
} else {
for (int i = 0; i < root->num_children; i++) {
rec_find_inputs(root->children[i], arr, len_arr);
}
}
}
void init_model(TreeNode* neuron_config) {
int rec_params_len = 0;
TreeNode** rec_params_arr = (TreeNode**) malloc(sizeof(TreeNode*) * 1);
rec_find_inputs(neuron_config, rec_params_arr, &rec_params_len);
printf("--------------\n");
printf("%d\n", rec_params_len);
for (int i = 0; i < rec_params_len; i++) {
printf("%f\n", rec_params_arr[i]->data);
}
}
我不确定这是否是我分配内存的方式有问题,或者我是否错误地迭代了数组。
这段代码
arr = realloc(*arr, *len_arr * sizeof(TreeNode*));
arr[*len_arr] = root;
无效。
数组已分配
*len_arr
个元素。所以索引的有效范围是[0, *len_arr)
。然而,在范围之外使用了无效索引*len_arr
arr[*len_arr] = root;