内存破坏了已分配块C的结尾

时间:2017-11-02 04:17:47

标签: c memory malloc

我有一个结构,其中有一个顶点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错误。

0 个答案:

没有答案