使用calloc()、malloc()和free()分配和管理内存

可以在程序运行时分配更多的内存。主要的工具是malloc()函数,
该函数接受一个参数:所需的内存字节数。malloc()函数会找到合适的
空闲内存块,这样的内存是匿名的。也就是说,  malloc()分配内存,
但是不会为其赋名。然而,它确实返回动态分配内存块的首字节地址。
因此,可以把该地址赋给一个指针变量,并使用指针访问这块内存。
因为char表示1字节malloc()的返回类型通常被定义为指向char的指针。
然而,从ANSI C标准开始,C使用一个新的类型:指向void的指针。该类型
相当于一个“通用指针”。malloc()函数可用于返回指向数组的指针、指向
结构的指针等,所以通常该函数的返回值会被强制转换为匹配的类型。
在ANSI  C中,应该坚持使用强制类型转换,提高代码的可读性。
如果 malloc()分配内存失败,将返回空指针。
列:
    Double * ptd;
    ptd = (double *)malloc(30 * sizeof(double));
以上代码为30double类型的值请求内存空间,并设置ptd指向该位置
free()函数的参数是之前malloc()返回的地址,该函数释放之前malloc()
分配的内存。
列:
    释放上个列子分配的内存free(ptd);
分配内存还可以使用calloc(),典型的用法如下:
long * newmem;
newmem = (long *)calloc(100, sizeof (long));
和malloc()类似,在ANSI之前,calloc()也返回指向char的指针;
在ANSI之后,返回指向void的指针。如果要储存不同的类型,应使用强制
类型转换运算符。calloc()函数接受两个无符号整数作为参数
(ANSI规定是size_t类型)。第1个参数是所需的存储单元数量,
第2个参数是存储单元的大小(以字节为单位)。在该例中,long4字节,
所以,前面的代码创建了1004字节的存储单元,总共400字节。
用sizeof(long)而不是4,提高了代码的可移植性。这样,在其他long
不是4字节的系统中也能正常工作。calloc()函数还有一个特性:它把块
中的所有位都设置为0(注意,在某些硬件系统中,不是把所有位都设置
为0来表示浮点值0)。free()函数也可用于释放calloc()分配的内存。

猜你喜欢

转载自blog.csdn.net/zwhsoul/article/details/80146669