C语言:使用realloc函数对malloc或者calloc动态分配的内存大小进行扩展
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct
{
char name[32];
int age;
char gender;
float score[3];
}Student;
typedef struct
{
Student * pData;//学生信息
int size;//容量大小
int count;//当前的记录个数
}Database;
//初始化数据库
int initDatabase(Database* db);
//销毁数据库
void destoryDatabase(Database* db);
//插入一条数据
int insertData(Database* db,Student stu);
//打印数据库的内容
void printDatabase(Database* db);
//随机生成数据
int myrandom(int range)
{
//产生一个range(范围)内的随机数
return rand()%range;
}
int main()
{
//初始化随机数种子
srand((unsigned)time(NULL));
Database db;
//初始化数据库
if(initDatabase(&db)!=0)
{
printf("数据库初始化失败!\n");
return -1;
}
//批量插入数据
for(int i=0; i<20; i++)
{
Student stu;
sprintf(stu.name,"name%d",i);
stu.age = myrandom(30);
stu.gender = myrandom(2) ? 'M' : 'F';
stu.score[0] = myrandom(100);
stu.score[1] = myrandom(100);
stu.score[2] = myrandom(100);
if(insertData(&db,stu) != 0)
{
printf("插入失败!");
break;
}
}
//打印数据库
printDatabase(&db);
//销毁数据库
destoryDatabase(&db);
return 0;
}
//初始化数据库
int initDatabase(Database* db)
{
db->size = 10;
db->count = 0;
db->pData = (Student*)calloc(db->size,sizeof(Student));
printf("%p\n",db->pData);
if(db->pData != NULL)
{
return 0;
}
return -1;
}
//销毁数据库
void destoryDatabase(Database* db)
{
free(db->pData);
db->pData = NULL;
}
//插入一条数据
int insertData(Database* db,Student stu)
{
//插入前先判断空间是否已满
if(db->count == db->size)//如果满了,要先扩展空间
{
db->size *= 22;//新的空间大小是原来的两倍
//用realloc扩展空间
db->pData = (Student*)realloc(db->pData,db->size*sizeof(Student));
printf("%p\n",db->pData);
if(db->pData == NULL)
{
return -1;
}
}
//插入新纪录
db->pData[db->count] = stu;
db->count++;
return 0;
}
//打印数据库的内容
void printDatabase(Database* db)
{
printf("数据库的大小:%d,现有记录个数:%d\n",db->size,db->count);
printf(" 姓名 年龄 性别 数学 语文 英语\n");
for(int i=0; i<db->count; i++)
{
printf("%8s\t%2d\t%c\t%.2f\t%.2f\t%.2f\t\n",
db->pData[i].name,
db->pData[i].age,
db->pData[i].gender,
db->pData[i].score[0],
db->pData[i].score[1],
db->pData[i].score[2]);
}
}
C语言:使用realloc函数对malloc或者calloc动态分配的内存大小进行扩展的更多相关文章
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- malloc,calloc,realloc函数用法,原理及不同解析
https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...
- malloc()函数,calloc()函数,realloc()函数,free()函数
malloc()函数 头文件:#include <stdlib.h> malloc() 函数用来动态地分配内存空间,其原型为:void* malloc (size_t size); [参数 ...
- malloc,calloc,realloc,alloc
三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...
- malloc()与calloc差别
Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slig ...
- malloc()与calloc区别 (转)
另外说明: 1.分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域.函数的 ...
- malloc()与calloc区别【转】
转自:http://blog.csdn.net/firecityplans/article/details/4490124/ 版权声明:本文为博主原创文章,未经博主允许不得转载. Both the m ...
- malloc()与calloc差异
Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slig ...
- C语言的本质(25)——C标准库之内存管理
程序中需要动态分配一块内存时怎么办呢?我们可以定义一个缓冲区数组,但是这种方法不够灵活,C89要求定义的数组是固定长度的,而程序往往在运行时才知道要动态分配多大的内存,例如: void foo(cha ...
随机推荐
- dubbo-demo的运行
在学习dubbo时,最主要的是将dubbo运行起来. 现在先搭建起来简单的demo. 一:安装zookeeper(在wondows下安装,且是单机模式) 1.下载zookeeper 2.下载的版本 3 ...
- Mermaid 学习
基础 在 VS code 中安装插件 Markdown Preview Mermaid Support,则便可支持 Mermaid 流程图 flowchart graph LR; A-->B; ...
- Netty堆外内存泄露排查与总结
导读 Netty 是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了 TCP 和 UDP 套接字服务器等网络编程. Netty 底层基于 JDK ...
- WMRouter:美团外卖Android开源路由框架
WMRouter是一款Android路由框架,基于组件化的设计思路,功能灵活,使用也比较简单. WMRouter最初用于解决美团外卖C端App在业务演进过程中的实际问题,之后逐步推广到了美团其他App ...
- 富文本插件KindEditor
具体用法查看官网http://kindeditor.net/doc.php {% load staticfiles %} <!DOCTYPE html> <html lang=&qu ...
- Template(Updating)
1.Splay (Tyvj1728) #include <bits/stdc++.h> using namespace std; ,INF=<<; ],sz[MAXN],cnt ...
- 【递推】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] D. XOR-pyramid
题意:定义,对于a数组的一个子区间[l,r],f[l,r]定义为对该子区间执行f操作的值.显然,有f[l,r]=f[l,r-1] xor f[l+1,r].又定义ans[l,r]为满足l<=i& ...
- [POI2000]Repetitions
题目大意: 求多个字符串的LCS. 思路: 同SPOJ-LCS2,不过因为SPOJ上数据比较水,当时用错误的写法过掉了,这次用正确的写法重新过了一遍. 拓扑排序按照每个状态的len值,用计数排序实现. ...
- Vi 学习 笔记
rails server -p 端口名 // 切换端口 Vi 常用指令: mkdir filename //创建文件 mv filename1 filename2 // 文件重命名 rm filena ...
- SCC缩点
int V; //顶点数量 vector<int> G[max_v]; //图的邻接表表示方法 vector<int> rG[max_v]; //把边反向建的图 vector& ...