所以我的程序内存泄漏有问题。我的函数free_stack之一假定释放堆栈中的所有内存,并且在此函数调用之后不应使用堆栈。我的另一个问题是在我的reset_stack函数中,该函数应该释放不再使用的任何内存。可以在调用函数后使用堆栈,并且该函数还应该将堆栈重置为* make_stack中的原始内容。我的程序没有这样做。这是我的代码。

struct int_stack *make_stack(int node_capacity){
    struct int_stack *stk = malloc(sizeof(struct int_stack));
    struct is_node *head = malloc(sizeof(struct is_node));

    head->contents = malloc(node_capacity * sizeof(int));
    head->next_index = 0;
    head->next = NULL;
    stk->node_capacity = node_capacity;
    stk->head = head;
    stk->size = 0;

    return stk;
}


void free_stack(struct int_stack *stk) {
while(stk->head->next != NULL) {
    free(stk);
}

}
void reset_stack(struct int_stack *stk) {
    free_stack(stk);
    *make_stack(stk->node_capacity);

}

最佳答案

调用free不会对您分配的内存有任何作用,也不会影响您在free上调用的指针的值。而且您的函数*make_stack(stk->node_capacity);返回指向新分配的堆栈的指针,请使用该指针。 stk = *make_stack(stk->node_capacity);

关于c - 释放并重置C中的堆栈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47087615/

10-10 17:24