在力扣上做题,经常出现这种话:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/

应该是这样翻译的:返回的数组必须被malloced,假设调用者调用了free()
我看了书,关于malloc()的用法是这样的:
void *malloc(size_t size)
// 例如:
double *ptd;
ptd=(double *) malloc(30*sizeof(double));
// 或者直接:
double *ptd=(double *) malloc(sizeof(double)*30);
解释一下void *malloc(size_t size):
malloc()返回一个指针,这个指针指向的地址所储存的数据类型是void,也就是任意类型。直到你向这个地址储存数据,这个指针指向的地址所储存的数据类型就会和你储存的数据类型相匹配。
malloc()的作用是动态分配内存,也就是内存空间可以按需求分配。
malloc()的参数只有一个,上面括号中的内容,意思是:输入一个size_t数据类型的变量size。这个size_t数据类型就是sizeof()返回的数据类型,sizeof()返回数据占用内存空间的字节数。
malloc()的用法就是输入size_t数据类型的变量,例如sizeof(int)*n,返回一个地址,同时在该地址处,分配了sizeof(int)*n字节大小的内存空间
现在再看上面的例子就很清楚了:
定义一个指针ptd,强制定义malloc()返回的地址所储存的数据类型为double,并在该地址分配大小为30个double型数据的内存空间,最后让指针ptd指向malloc()返回的这个地址。
最后:
malloc()可以动态分配内存,还有一个函数free()可以释放内存,在之前分配的动态的内存空间不再需要的时候,使用free(),这在处理大量数据的时候非常重要,如果只分配内存而不释放,会有耗尽内存的风险(也就是内存泄漏)。
与之类似的还有calloc()和realloc(),我暂时用不到,也没有去深入学习