繁体   English   中英

C中的结构体中的指针指向的自由数组

[英]Free array pointed to by a pointer within a struct in C

我有一个在动态数组中实现的堆栈。 以下是我的一些功能。 当我调用stk_reset函数时,似乎没有完全释放堆栈。

这是我的结构。 我必须在结构内部有一个指向动态数组的指针

    typedef struct stack {
        char *items;
        int arrSize;
        int top;
    } StackStruct;


    void stack_create(StackStruct *s) {
        char *arr = malloc(sizeof(char)*2);

        if (arr == NULL) {
            printf("Insufficient memory to initialize stack.\n");
            return;
        }

        s->arrSize = 2;
        s->items = arr;
        s->top = -1;
    }

我如何释放分配堆栈的数组的每个元素? 我将此语句free((s-> items)++)与for循环一起使用,但没有用。

    void stk_reset(StackStruct *s) {
    int i;

        for (i = 0; i <= s->arrSize; i++)
            free((s->items)++);
        free(s->items);
        s->items = NULL;
        s->top = -1;
        s->arrSize = 0;
    }

您只能在malloc返回的指针上调用free ,并且只能释放整个块,而不是单个字节。

您希望一(1)个调用freemalloc每次调用。 在这里,您只分配了一个有两个字符的空间的项目。 free它,这很简单。 这就是所谓的“安全”发布(或免费)。

if (s->items != NULL) {
    free(s->items);
    s->items = NULL; // Reset to be safe.
}

尽管要使用它,但是在尝试使用它之前,需要确保将值初始化为NULL: s->items = NULL;

不需要其他free调用,并且当您只有一个malloc时,当然不需要循环调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM