C语言有许多存储类别,详细可戳此链接了解,它们在确定存储类别后会自动地进行管理。而现在可利用库函数更灵活地分配和管理内存。
malloc()函数
程序可通过malloc()函数在运行时分配更多的内存,该函数会找到合适的内存块,这样的内存是匿名的,但是它会返回动态分配内存块中的首字节地址。因此,可以把返回值赋值给指针,并使用指针访问这块内存。如果分配内存失败,则会返回空指针。
malloc()函数接受1个参数,表示所需的内存字节数,该函数的原型在stdlib.h头文件中。如需要创建一个数组
double * p;
p = (double *)malloc(30 * sizeof(double));
上述代码先声明了一个指针p,再使用malloc()函数为30个double类型值申请内存。在赋值时还使用了强制转换,将返回值转换为匹配的类型。
在C中不一定要使用强制转换类型,而在C++中必须使用。
通过这种方式创建的数组可以在程序运行时选择数组大小并分配内存。
free()函数
malloc()函数往往要与free()函数一起使用,free()函数的参数是malloc()函数返回的地址,用于释放malloc()分配的内存。该函数的原型也在stdlib.h头文件中。
double * p;
p = (double *)malloc(30 * sizeof(double));
free(p);
有些操作系统会在程序结束时自动释放内存,而有些不会。为了保险起见,还是要使用该函数来释放内存,避免内存泄漏的发生。
free()函数的参数指针可以与malloc()返回的指针变量名不同,但是必须是同一块地址。
free()函数不能释放其它方式分配的内存,也不能释放同一块内存多次。
calloc()函数
分配内存除了使用malloc()函数外,还可使用calloc()函数。与malloc()函数不同的是,calloc()函数接受2个参数,第1个参数是所需的存储单元数量,第2个参数是存储单元的大小。如
double * p;
p = (double *)calloc(30, sizeof(double));
calloc()函数会把块中的所有位都设置为0。
该函数分配的内存也可通过free()函数释放。
本文介绍了C语言中动态内存分配的方法,包括malloc()函数用于按需分配内存,calloc()函数则提供初始化为0的内存块分配,以及free()函数用于释放内存,防止内存泄漏。在C++中,malloc()分配的内存需要类型转换。正确使用这些函数对于管理程序内存至关重要。
8848

被折叠的 条评论
为什么被折叠?



