c - 释放一个结构数组
问题描述
#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++;
}
它会运行。知道如何释放这些元素吗?谢谢!
解决方案
我正在尝试一一释放数组中的元素。但是这段代码无法运行,所以我认为 free 在第二个 while 循环中可能有问题。
是的,错误是试图一一释放元素。
您不能在分配内存的不同分区中释放分配的内存。参数 tofree()
必须是先前从分配函数获得的指针值(并且自释放后未获得)。然后free()
调用将释放整个块。它看不到您可能正在使用的该块的任何细分,即使它可以看到它们也不太可能尊重它们。
知道如何释放这些元素吗?
完成所有数据后,立即释放整个块。也就是说,只是
free(a);
(还有free(b)
, free(c)
,等)
推荐阅读
- django - 从多对多关系 DRF 获取序列化祖父母
- javascript - 失败的道具类型:提供给“字段”的道具“组件”无效。安装 mui v4 后
- redisgraph - RedisGraph:指定整数类型的值?最大整数?
- .net - 从 MVC2 升级到 MVC5 项目
- c# - 使用 MyString.Remove(x,y) 从 C# 中的字符串中删除多个字符
- java - 就地合并排序
- javascript - 如果将属性添加到冻结的全局对象,则抛出错误?
- python - 在熊猫数据透视表中运行 sum (python)
- java - 无法自动接线。找不到“RoleMappingService”类型的 bean
- javascript - 如何定义独特的按钮类型?