我有一个结构,其中有一个顶点BST(称为顶点的节点)。每个顶点都有一个char数组名称。我正在研究一个获取所有顶点名称并将它们存储在数组中的函数。
我觉得这应该可以工作,但是在测试时我得到的“内存已经破坏了已分配块的结尾”。我是C的新手,我已经调试了很多,并且无法确定哪个变量或者它被抛出的位置。任何帮助将不胜感激!
我已经缩小了它以便我知道这个错误在从get_vertices()调用后会在fill_vertices_array()中的某个地方被抛出,但我不能再将其缩小到某个变量或递归。
char **get_vertices(Graph graph) {
int num_verts = num_vertices(graph);
/* use a pointer so recursive calls won't effect incrementation */
int *i = malloc(sizeof(*i));
/* allocate space for all vertices plus 1 for the null index */
char **vertices = (char **)malloc((num_verts + 1) * sizeof(char *));
*i = 0;
/* fill with vertices */ /* CLOBBERING HAPPENING SOMEWHERE IN BELOW CALL */
fill_vertices_arr(vertices, i, graph.vertex);
/* save NULL as the last index */
vertices[num_verts] = NULL;
return vertices;
}
void fill_vertices_arr(char **vertices, int *start_index, Vertex *vertex) {
if (vertex != NULL) {
/* in-order traversal, adding to array */
fill_vertices_arr(vertices, start_index, vertex->left);
vertices[*start_index] = (char *)malloc(strlen(vertex->name) * sizeof(char));
strcpy(vertices[*start_index], vertex->name);
(*start_index) += 1;
fill_vertices_arr(vertices, start_index, vertex->right);
}
}
注意:在我的测试中,我添加了8个顶点,这已成功,因此它有8个,每个都有一个名称。当我运行“char ** names = get_vertices(graph)”时,我得到了clobber错误。