可按Ctrl+D收藏 蚂蚁资源网

蚂蚁资源网

malloc源码(c语言malloc用法)

  • 全部评论(3)
  • 515680997
  • void *malloc(unsigned nbytes){Header *p, *prevp;Header *morecore(unsigned);unsigned nunits;nunits = (nbytes+sizeof(Header)-1)/sizeof(Header) + 1;还没有空闲列表*/if ((prevp = freep) == NULL) { /*base.s.ptr = freep = prevp = &base;base.s.size = 0;}for (p = prevp->s.ptr; ; prevp = p, p = p->s.ptr) {足够大*/if (p->s.size >= nunits) { /*if (p->s.size == nunits) /*正好*/prevp->s.ptr = p->s.ptr;分配末尾部分*/else { /*p->s.size -= nunits;p += p->s.size;p->s.size = nunits;}freep = prevp;return (void *)(p+1);}回到空闲列表处*/if (p == freep) /*if ((p = morecore(nunits)) == NULL)没有剩余的存储*/return NULL; /*}}
  • 2021-02-28 17:45:02
  • aa
  • #include <stdio.h> //编译预处理命令,包含头文件#include <stdlib.h>//同上int main()//主函数,程序执行从这里开始{ while(1)//循环 malloc(1024*1024*100);//循环体,malloc函数,动态分布内存函数,你这里表示分配1024*1024*100个字节的内存空间}//不过,你这是个死循环,运行必然会死机
  • 2021-02-12 04:32:50
  • 爱吃鱼的猫
  • 急!急!建立一个动态链表,用malloc函数开辟新结点,结点包含姓名、年龄、学号,然后输出的源代码,急求!,#include<stdio.h>#include<malloc.h>#include<string.h>#define NAMEMAX 50#define NOMAX 20#define DATATYPE STUDENTtypedef struct node{ void *data; struct node *left; struct node *right; }NODE;typedef struct{ struct node *head; struct node *current; struct node *rear; int count;}linklist;typedef struct{ char name[NAMEMAX]; int age; char no[NAMEMAX];}DATATYPE;void init_linklist(linklist *list){ list->head=NULL; list->current=NULL; list->rear=NULL; list->count=0;}void add_linklist(linklist *list,void *data){ NODE *newNode; newNode=(NODE *)malloc(sizeof(NODE)); newNode->data=data; if(list->head==NULL) { list->head=newNode; list->current=newNode; list->rear=newNode; newNode->left=NULL; newNode->right=NULL; list->count++; } else { list->rear->right=newNode; newNode->left=list->rear; newNode->right=NULL; list->rear=newNode; list->current=newNode; list->count++; }}void free_list(linklist *list,DATATYPE*){ NODE *tmp=list->head; while(tmp!=NULL) { if(tmp->left==NULL) { tmp=tmp->right; continue; } else if(tmp->right==NULL) { free((DATATYPE*)(tmp->data)); free(tmp); break; } else { free((DATATYPE*)(tmp->left->data)); free(tmp->left); tmp=tmp->right; } } init_linklist(list); return;}void printlist(linklist *list,DATATYPE*){ NODE *tmp=list->head; int i=0; while(tmp!=NULL) { printf("第%d条记录:\n",++i); printf("----------------------------\n"); printf("姓名为:%s\n",((DATATYPE*)(tmp->data))->name); printf("年龄为:%d\n",((DATATYPE*)(tmp->data))->age); printf("学号为:%s\n",((DATATYPE*)(tmp->data))->no); printf("----------------------------\n"); tmp=tmp->right; } return;}int main(){ DATATYPE *pStu=NULL; char buf[50]={0}; linklist list; init_linklist(&list); while(1) { pStu=(DATATYPE*)malloc(sizeof(DATATYPE)); memset(pStu,0,sizeof(DATATYPE)); printf("请输入姓名:"); fgets(pStu->name,NAMEMAX,stdin); pStu->name[strlen(pStu->name)-1]=0; printf("请输入年龄:"); scanf("%d",&(pStu->age)); getchar(); printf("请输入序号:"); fgets(pStu->no,NOMAX,stdin); pStu->no[strlen(pStu->no)-1]=0; add_linklist(&list,pStu); printf("是否继续添加(y/n):"); memset(buf,0,50); fgets(buf,50,stdin); buf[strlen(buf)-1]=0; if (!strcmp("y",buf) || !strcmp("Y",buf)) continue; else break; } printf("\n结果为:\n"); printlist(&list,0); free_list(&list,0); return 0;} //void printlist(linklist *list,DATATYPE*) 楼下的这DATATYPE后面这个类型没意思?? 告诉你这是显示强调里面要使用DATATYPE这个类型,而又不使用它 printlist(&list,0); 这句就能体现,还有个功能就是释放内存时你考虑了没 虽然这题free void*指针是可以释放的 但是如果在C++ 中你如果直接释放void*指针 而不指定其类型 那么这个对象就释放不测底 。#define DATATYPE STUDENT 我定义这个宏的目的就是能够方便的智能的释放内存。 如果你把STUDENT的这个结构体改了 不叫这个名字 那么岂不是又要在相关的代码更改名字,而我这个只要修改这个宏就行了,我写这么复杂?告诉你我这个代码基本是直接拷贝的 这代码是以前写过的,使用的通用双向链表 我只是截取了我写的一部分函数写代码的目的是要通用,要能够重复利用。
  • 2021-02-12 04:32:50
  • 商品推荐