内存分配malloc函数注意事项。

malloc的全称是memory allocation,中文叫动态内存分配,用于向系统申请分配指定字节的内存空间


原型:extern void *malloc(unsigned int num_bytes);

看原型很头疼,来两个例子:

int* p; 

p = (int *) malloc (sizeof(int)*128);//分配128个整型存储单元
double *pd=(double *) malloc (sizeof(double)*12);//分配12个double型存储单元

 通过这2个声明可以看出malloc的用法:

又是指针。malloc函数返回值类型为void *,但void* 类型可以强制转换为任何其它类型的指针。相当于malloc可以返回任何类型的指针。

几乎只要用到malloc的地方就要用到强制转换,因为应该没人会用一个void类型处理实际数据吧。

几乎只要用到malloc的地方就要用到sizeof(),这个不用解释。

即:   类型 *指针=(类型*) malloc ( sizeof(类型) );

这个原型看起来容易多了。

需注意的问题:

用malloc动态申请内存块时,最好进行返回值的判断。

分配失败返回空指针NULL。

内存不再使用时,应使用free()函数将内存块释放。

建议养成强制转换的习惯。

malloc 和 new 不同:

new 返回指定类型的指针,并且可以自动计算所需要大小。

malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。

例3:

struct stu *pb;
pb=(struct stu *)malloc(sizeof(struct stu));

套用上面的公式,我们可以方便的写出自己的例子,例3先定义一个结构体指针pb,再分配一个结构体大小的内存空间,并把首地址赋给pb;

当我们使用链表时,用malloc分配空间将会非常实用。

 
 
原文地址:https://www.cnblogs.com/anwcq/p/C_malloc.html