首页 > 编程笔记 > C语言笔记 阅读:39

malloc在c语言中的用法(附带实例)

在内存的全局存储空间中,用于程序动态分配和释放的内存块称为自由存储空间,通常也称为堆。

在 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() 函数。

相关文章