malloc函数

我们都知道数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。

例如:
int n;
scanf("%d",&n);
int a[n];
用变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用数组的办法很难解决。 所以C语言提供了malloc函数用来动态分配内存。

原型:extern void *malloc(unsigned int num_bytes);
用法:#include <malloc.h> 或 #include<stdlib.h>
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL
当内存不再使用时,应使用free()函数将内存块释放。
malloc的语法是:

      指针名=(数据类型*malloc(长度),(数据类型*)表示指针

 例如: 

#include <stdio.h>
#include <malloc.h>

int main()
{
    int *p;
    int n, m;
    scanf("%d%d", &n, &m);
    p = (int *)malloc(m * n);   //分配了一个n * m的内存空间,并把这个空间的首地址赋值给指针p 
    system ("pause");
    return 0;
}


malloc()函数的工作机制malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传 给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片 段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检 查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。 

#include <stdio.h> 
#include<stdlib.h>
main()
{
int count,*array; /*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/ 
count=100;
if((array=(int *)malloc(count*sizeof(int))) == NULL) //注意这个写法
{
printf("不能成功分配存储空间。");
exit(1);
}
for(count=0;count<10;count++) /*给数组赋值*/ 
array[count]=count;
for(count=0;count<10;count++) /*打印数组元素*/
printf("%2d",array[count]);
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值