如果我有一个结构:
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是空指针,则不会发生任何操作。否则,如果
参数与之前由calloc
、malloc
或返回的指针不匹配realloc
函数,或者如果通过调用free
或realloc
释放空间,
这种行为是不确定的。
退换商品free
函数不返回任何值。