如果我有一个结构:

struct Rec
{
    uint16_t vals[500];
};


Rec * prec = malloc(sizeof(Rec));
//Rec * prec = (Rec *) malloc(sizeof(Rec)); This code was my original and is incorrect.
//                                          See Below for details.

// initialize everything in vals

此代码是否足以释放所用的所有内存?
free(prec);

或者我必须单独free数组吗?

最佳答案

这就足够了。
您没有单独分配数组,因此只释放分配的指针就足够了。
遵循规则:
您应该只对由free返回给您的地址调用malloc,否则将导致未定义的行为。
参考文献:
C99标准:7.20.3.2free功能
简介
#包括
无空隙(空隙*ptr);
说明:
free函数导致释放ptr指向的空间,即
可供进一步分配。如果ptr是空指针,则不会发生任何操作。否则,如果
参数与之前由callocmalloc或返回的指针不匹配
realloc函数,或者如果通过调用freerealloc释放空间,
这种行为是不确定的。
退换商品
free函数不返回任何值。

09-10 09:31
查看更多