关于动态分布函数

动态分布函数的核心是malloc()和free()。每次调用malloc()时,军分配剩余空内存的一部分;每次调用free()时,均向系统返回内存。被分配的空内存区中的内存叫做堆(heap)。动态分配函数的原型在<stdlib.h>中。

函数malloc()的原型如下:

void *malloc(size_t size);

函数返回一个指针,指向从堆中分配的内存区域(参数size的值)的首字节。当堆中的内存不能满足分配请求时,malloc()返回空指针。使用前,必须核实返回的指针不为空,否则将导致系统瘫痪。

函数free()的原型为:

void free(void *ptr);

函数free()向堆中返回ptr指向的内存,使内存可供将来再来分配。

调用free()的指针必须实现前使用动态分配系统函数分配而得到的,用无效的指针调用free()可能摧毁内存管理机制,使系统瘫痪。如果传递一个空指针,free()不作操作。

程序代码如下:

#include<stdlib.h>
#include<stdio.h>
#define num 10
int main()
{
	char *str[num];//定义一个字符型指针数组
	//为数组中的每个指针分配内存
	 for(int i=0;i<num;i++)
	 {
	 	if((str[i]=(char*)malloc(128))==NULL)
	 	{
	 		printf("Allocation Error.\n");
	 		exit(1);
	 	}
	 	//在分配的内存中存放字符串
		 printf("Enter string %d: ",i);
		 gets(str[i]);
	 }
	 	//释放内存
		 for(int i=0;i<num;i++)
		 free(str[i]);
		 //由于主函数有返回值,故返回0
	 return 0;
}

定义一个字符型指针数组str,它里面放有num(10)个字符型的指针。使用for循环维数组中的各个指针分配内存地址,大小都为128个字节。在分配内存的过程中,如果发现内存分配不成功(即函数malloc()的返回值为NULL),则给出警告语句“Allocation Error.”。

内存分配完毕后,通过输入字符串为每个指针赋初值。

最后,释放所有分配内存。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 07:50:16

关于动态分布函数的相关文章

c语言动态链表的创建

创建动态连链表就是将一个个节点连接起来 (1)动态生成节点 (2)输入节点数据 (3)将节点链在一起 例: typedef struct Data { char num[20]; char name[10]; char sex; float english; float chinese; float math; }; typedef struct Node { struct Data data;//结构体类型//结构体嵌套 struct Node* next;//结构体指针型 }node,*Pn

JS获取图片的缩略图,并且动态的加载多张图片

找了好多资料也没有找到该死的ie的解决办法,最后放弃了ie <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js获取缩略图</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <st

C# 动态生成WebService,无需添加引用

C#项目调用WebService是很常见的现象,但一旦修改链接地址就需要重新更新引用很是麻烦,这里跟大家分享一个通过地址,无需添加引用动态生成Webservice的小方法 方法类: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ServiceModel; 6 using System.ServiceModel.Channels

将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取

Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: 1 OpenFileDialog ofd = new OpenFileDialog(); //选择文件路径 2 ofd.Title = "Excel文件"; 3 ofd.FileName = ""; 4 ofd.Filter = "Excel文件(*.xls)| *.xls"; 5 s

微信小程序 setData动态设置数组中的数据

setdata传递动态数据值必须为对象(只能是key:value) 语法如下 this.setData({ filter: 1212 }) 如果setdata要传递数组呢? 首先相到的是 this.setData({ filter.a: 12 filter.b: 32 }) 这样回报语法错误 既然语法规定不能在里面写数组,那就把数组定义到外面 filter.selectArea1 = 1, filter.selectArea2 = 2, filter.selectArea3 = 3, this.

页面滚动图片等元素动态加载插件jquery.scrollLoading.js

如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的就不用加载了.这样还可以在一定程度上节省服务器资源.该插件作者的网页将该插件的功能和使用方法描述的非常详细,这里把最一般最普遍的使用情况给大家展现一下. 插件作者:http://www.zhangxinxu.com/ 首先我们需要加载jQuery库和本插件js文件. (jquery.scrollLo

Python的动态类型

动态类型:                                                      在python中,类型是在运行过程中自动决定的,而不是通过代码声明的. 变量:                                                                                     变量是一个系统表的元素,拥有指向对象的连接的空间 python中,类型的概念是存在于对象中的,而不是变量中,变量是通用的. 变量的使用

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

MyBatis动态SQL

1,<!-- if+where查询 --> <select id="queryLikeByStuName2" parameterType="map" resultMap="studentMap"> select * from student <where> <if test="studentNo != null and studentNo != ''" > and Student