释放通过malloc获得的结构数组

时间:2016-02-02 15:19:41

标签: c malloc free

所以我有这个结构:

[Table("Bookings")]
public class Bookings
{
    [PrimaryKey]
    public int BookingId { get; set; }

    [NotNull]
    public DateTime StartDate { get; set; }
}

typedef struct type { int a; char* b; } type; 程序中,我制作了2个这些结构的数组,然后使用main

malloc()

现在我想要释放这些结构数组是正确的:

type *v;
type *w;
v=malloc(50*sizeof(type));
w=malloc(50*sizeof(type));

2 个答案:

答案 0 :(得分:5)

是的,这是正确的。您只需传递malloc()和系列返回的指针。

调用free()时,您无需提及/提供已分配内存的大小。尺寸将自动处理(通过操作系统)。

FWIW,如果你已经为成员分配了动态内存,比如w[i].b,你首先需要free(),因为,一旦你在{{1}上调用free()w中分配的所有内存都将无法访问,因此您的程序将泄漏内存。

答案 1 :(得分:2)

如果您没有为数据成员

分配内存,那么它将是正确的
char* b;

数组的元素。

否则,您首先需要释放此数据成员指向的内存,然后才释放原始指针。

例如

for ( size_t i = 0; i < 50; i++ ) free( v[i].b );
free( v );

考虑到如果此数据成员是由字符串文字的地址初始化的,那么您不应释放此内存,因为字符串文字具有静态存储持续时间。