malloc
原型 :extern void *malloc(unsigned int num_bytes);
用法 :#include <malloc.h>
或#include<stdlib.h>
功能 :分配长度为num_bytes字节的内存块
说明 :如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)表示指针.举例:// malloc.c#include <syslib.h>#include <malloc.h>main(){ char *p;clrscr(); // clear screenp=(char *)malloc(100);if(p)printf("Memory Allocated at: %x",p);elseprintf("Not Enough Memory!\n");free(p);getchar();return 0;}
----------------------------------------------
struct IvInfo
{
char airCode[10];
char fltNum[10];
char fltSuffix[10];
char origCity[10];
char destCity[10];
char *leaveDate;
char leaveTime[10];
char *arriveTime;
char *fltClass;
char *reMark;
};
typedef struct IvInfo INFO;
INFO *p = (INFO*)malloc(100);
------------------------------------------------ 上面这个 结构体,如果 不用 malloc就 报错 ,没有 分配 内存块,同时上面的 char *fltClass是错误的,应该
是 char fltClass[10]
malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2、函数的用法: 其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了,举个简单例子:程序代码: // Code... char *Ptr = NULL; Ptr = (char *)malloc(100 * sizeof(char)); if (NULL == Ptr) { exit (1); } gets(Ptr); // code... free(Ptr); Ptr = NULL; // code..
用法 :#include <malloc.h>
或#include<stdlib.h>
功能 :分配长度为num_bytes字节的内存块
说明 :如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)表示指针.举例:// malloc.c#include <syslib.h>#include <malloc.h>main(){ char *p;clrscr(); // clear screenp=(char *)malloc(100);if(p)printf("Memory Allocated at: %x",p);elseprintf("Not Enough Memory!\n");free(p);getchar();return 0;}
malloc()函数的工作机制
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传 给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片 段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检 查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。----------------------------------------------
struct IvInfo
{
char airCode[10];
char fltNum[10];
char fltSuffix[10];
char origCity[10];
char destCity[10];
char *leaveDate;
char leaveTime[10];
char *arriveTime;
char *fltClass;
char *reMark;
};
typedef struct IvInfo INFO;
INFO *p = (INFO*)malloc(100);
------------------------------------------------ 上面这个 结构体,如果 不用 malloc就 报错 ,没有 分配 内存块,同时上面的 char *fltClass是错误的,应该
是 char fltClass[10]
malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2、函数的用法: 其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了,举个简单例子:程序代码: // Code... char *Ptr = NULL; Ptr = (char *)malloc(100 * sizeof(char)); if (NULL == Ptr) { exit (1); } gets(Ptr); // code... free(Ptr); Ptr = NULL; // code..