malloc在c语言中的用法(附带实例)
在内存的全局存储空间中,用于程序动态分配和释放的内存块称为自由存储空间,通常也称为堆。
在 C语言程序中,可以使用 malloc() 和 free() 函数来从堆中动态地分配和释放内存。
malloc() 函数位在
malloc() 函数会返回一个指针,该指针指向分配的内存空间,如果出现错误则会返回 NULL。
例如,使用 malloc() 函数分配一个整型内存空间,代码如下:
malloc() 函数成功分配内存空间后会返回一个指针,因为分配的是 int 型的内存空间,所以返回的指针也应该是相对应的 int 型指针,这样就要进行强制类型转换。最后将函数返回的指针赋给指针 pInt 就可以保存动态分配的整型内存空间地址。
【实例】某服装店购入了 10240 件衣服,为了将这批衣服顺利入库,老板要收拾库房,腾出放这批衣服的空间。请编写程序,使用 malloc() 分配内存空间,实现将这批衣服的件数输出。具体代码如下:
注意,C语言中规定,如果所申请的内存分配不成功,malloc() 函数的返回值为 null pointer,也就是 NULL。在这种情况下,如果继续运行之后代码,程序就会崩溃。所以在申请分配内存后,应该及时检查内存分配是否成功。
修改上面的程序:
在 C语言程序中,可以使用 malloc() 和 free() 函数来从堆中动态地分配和释放内存。
malloc() 函数位在
<stdlib.h>
头文件中,它的原型如下:
void *malloc(unsigned int size);该函数的作用是在内存中动态地分配一块 size 大小的内存空间。
malloc() 函数会返回一个指针,该指针指向分配的内存空间,如果出现错误则会返回 NULL。
例如,使用 malloc() 函数分配一个整型内存空间,代码如下:
int *pInt; pInt=(int*)malloc(sizeof(int));首先定义指针 pInt 来保存分配内存空间的地址。在使用 malloc() 函数分配内存空间时,需要指定具体的内存空间的大小(size),这时调用 sizeof() 函数就可以得到指定类型的大小值。
malloc() 函数成功分配内存空间后会返回一个指针,因为分配的是 int 型的内存空间,所以返回的指针也应该是相对应的 int 型指针,这样就要进行强制类型转换。最后将函数返回的指针赋给指针 pInt 就可以保存动态分配的整型内存空间地址。
【实例】某服装店购入了 10240 件衣服,为了将这批衣服顺利入库,老板要收拾库房,腾出放这批衣服的空间。请编写程序,使用 malloc() 分配内存空间,实现将这批衣服的件数输出。具体代码如下:
#include<stdio.h> #include<stdlib.h> int main() { int* iIntMalloc = (int*)malloc(sizeof(int)); /*分配内存空间*/ *iIntMalloc = 10240; /*使用该内存空间保存数据*/ printf("衣服有%d件\n", *iIntMalloc); /*输出数据*/ free(iIntMalloc); return 0; }运行程序,输出结果为:
衣服有10240件
从该实例代码和运行结果可以看出,在程序中使用 malloc() 函数分配了内存空间,通过指向该内存空间的指针,使用该内存空间保存数据,最后输出该数据表示保存数据成功。注意,C语言中规定,如果所申请的内存分配不成功,malloc() 函数的返回值为 null pointer,也就是 NULL。在这种情况下,如果继续运行之后代码,程序就会崩溃。所以在申请分配内存后,应该及时检查内存分配是否成功。
修改上面的程序:
#include<stdio.h> #include<stdlib.h> int main() { int* iIntMalloc = (int*)malloc(sizeof(int)); /*分配内存空间*/ if(iIntMalloc==NULL){ printf("申请堆内存失败!"); return -1; } *iIntMalloc = 10240; /*使用该内存空间保存数据*/ printf("衣服有%d件\n", *iIntMalloc); /*输出数据*/ free(iIntMalloc); return 0; }再次强调,使用 malloc() 函数分配的内存空间是在堆中,而不是在栈中。因此在使用完这块内存空间之后一定要将其释放掉,释放内存空间使用的是 free() 函数。