使用动态内存分配来消除使用变体记录造成的内存空间浪费(存货系统)
来源:互联网 发布:淘宝客采集软件神器 编辑:程序博客网 时间:2024/05/21 19:26
inventor.h
/*
** 存货记录的声明
*/
/*
** 包含零件专用信息的结构
*/
typedef struct {
int cost;
int supplner;
}Partinfo;
/*
**存储装配件专用信息结构
*/
typedef struct {
int n_parts;
struct SUBASSYPART{
char partno[10];
short quan;
}*part;
}Subassyinfo;
/*
**存货记录结构,它是一个变体记录
*/
typedef struct {
char partno[10];
int quan;
enum {PART, SUBASSY} type;
union {
Partinfo *part;
Subassyinfo *subassy;
} info;
}Invrec;
inventer.c
#include <stdlib.h>
#include <stdio.h>
#include "inventor.h"
/*
**用户创建SUBASSEMBLY(装配件)存货记录的函数
*/
Invrec *create_subassy_record(int n_parts)
{
Invrec *new_rec;
//试图为Invrec部分分配内存
new_rec = malloc(sizeof(Invrec));
if(new_rec != NULL)
{
//内存分配成功,现在存储SUBASSYINFO部分
new_rec->info.subassy = malloc(sizeof(Subassyinfo));
if(new_rec->info.subassy != NULL)
{
//为零件获取一个足够大的数组
new_rec->info.subassy->part = malloc(n_parts * sizeof(struct SUBASSYPART));
if(new_rec->info.subassy->part != NULL)
{
//获取内存,填充我们已经知道值的字段,然后返回
new_rec->type = SUBASSY;
new_rec->info.subassy->n_parts = n_parts;
return new_rec;
}
//释放内存
free(new_rec->info.subassy);
}
free(new_rec);
}
return NULL;
}
/*
** 释放存货记录的函数
*/
void discard_inventory_record(Invrec *record)
{
//删除记录中的变体部分
switch(record->type)
{
case SUBASSY:
free(record->info.subassy->part);
free(record->info.subassy);
break;
case PART:
free(record->info.part);
break;
}
//删除记录的主体部分
free(record);
}
//小测试
void main()
{
int n_part=10;
Invrec *rec;
rec=create_subassy_record(n_part);
if(rec != NULL){
printf("%d",rec->info.subassy->n_parts);
}
discard_inventory_record(rec);
getchar();
}
- 使用动态内存分配来消除使用变体记录造成的内存空间浪费(存货系统)
- 使用CRT调试内存分配堆来找出未释放的内存空间
- 使用CRT调试内存分配堆来找出未释放的内存空间
- 使用CRT调试内存分配堆来找出未释放的内存空间
- 大量使用kmalloc容易造成内存浪费
- 为什么不使用动态内存的方法给uC/OS-II任务堆栈分配内存空间?
- 动态内存分配符的使用
- 使用动态内存分配的通讯录实现
- 使用多重soa来消除企业系统之间的差异
- c++:动态内存分配(new和delete的使用)
- 动态内存分配到底为谁分配内存空间
- 测试系统可供malloc()使用的内存空间大小
- Effective STL: 使用reserve来避免不必要的内存分配
- ImageButton消除使用setImageDrawable造成的边框问题。
- 使用Instruments来监控应用内存分配
- 使用指向指针的指针进行动态内存分配
- DSP里动态内存分配malloc函数的使用
- 动态顺序表(可分配内存空间)
- CRichEdit控件操作使用
- 常用的 mysql slowquery 日志分析工具
- iis7 asp ado oracle 乱码问题
- apache 处理流程图
- SIFT 尺度空间
- 使用动态内存分配来消除使用变体记录造成的内存空间浪费(存货系统)
- linux常用命令之用户管理篇
- Blog开张大吉了!
- 长大了就要有个大人样---献给我所有朋友
- 对字节流套接口read的重新认识
- google analytics 跟踪所有搜索引擎的设置方法
- js 实现今天的上一周和下一周
- 2010.03.18
- 免安装Oracle客户端使用PL/SQL for Oracle9i ,10g,11g