首页 > 解决方案 > 释放一个结构数组

问题描述

#include<stdlib.h>
#include <stdio.h> 
#include <string.h> 

struct t {

    int value;
};

int main (void) {

    struct t *a = malloc(6*sizeof(struct t));
    struct t *b = malloc(sizeof(struct t));

    struct t *c = malloc(sizeof(struct t));
    c->value = 100;
    struct t *d = malloc(sizeof(struct t));
    d->value = 100;
    struct t *e = malloc(sizeof(struct t));
    e->value = 100;

    memcpy(b, a, sizeof(*a));

    int j = 0;

    while (j<6){
        a[j] = *c;
        j++;
    }


    int t = 0;
    while(t < 6){
        free(&a[t]);
        t++;
    }


    free(a);

}

我正在尝试一一释放数组中的元素。但是这段代码无法运行,所以我认为 free 在第二个 while 循环中可能有问题。在我将第二个 while 循环更改为:

    while(t < 6){
        printf("%d",a[t].value);
        t++;
    }

它会运行。知道如何释放这些元素吗?谢谢!

标签: cfree

解决方案


我正在尝试一一释放数组中的元素。但是这段代码无法运行,所以我认为 free 在第二个 while 循环中可能有问题。

是的,错误是试图一一释放元素。

您不能在分配内存的不同分区中释放分配的内存。参数 tofree()必须是先前从分配函数获得的指针值(并且自释放后未获得)。然后free()调用将释放整个块。它看不到您可能正在使用的该块的任何细分,即使它可以看到它们也不太可能尊重它们。

知道如何释放这些元素吗?

完成所有数据后,立即释放整个块。也就是说,只是

free(a);

(还有free(b), free(c),


推荐阅读