所以我有这个结构:
[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));
答案 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 );
考虑到如果此数据成员是由字符串文字的地址初始化的,那么您不应释放此内存,因为字符串文字具有静态存储持续时间。