亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fence.txt

?? 實現C語言中的malloc()函數
?? TXT
字號:
ssd6(系統級編程)---ex3(2008-10-28 18:25:30)標簽:雜談    

//"debugmalloc.c"

#include <stdlib.h>
#include <string.h>
#include "debugmalloc.h"
#include "dmhelper.h"
#include <stdio.h>

#define ALIGN  8
#define THEFENCE 0xDEADBEEF
#define HEADERSIZE sizeof(struct header)
 
struct header {
 int checksum;
 size_t size;
 int fence;
};

#define FOOTERSIZE sizeof(struct footer)
 
struct footer {
 int fence;
};


int allocatedSize = 0;


typedef struct block_node block_list;
struct block_node {
 void *ptr;
 int size;
 char *filename;
 int linenum;
 block_list *next;
};                  

         
block_list *allocatedList;//the header of the list


int add_block_to_list(void *ptr, int size, char *filename, int linenum) {
 block_list *newblock;
 char *name;

 newblock = (block_list *) malloc(sizeof(struct block_node));
 if (!newblock) {
  return -1;                    
 }
 name = (char *) malloc(strlen(filename) + 1);
 if (!name) {
  free(newblock);
  return -1;                                                                                                                                                                                                                                          
 }                                                                                                                                                                                      
 strcpy(name, filename);             
                                                                                                                                         
 newblock->ptr = ptr;
 newblock->size = size;
 newblock->filename = name;
 newblock->linenum = linenum;
 newblock->next = allocatedList;
 allocatedList = newblock;
 return 0;
}

int remove_block_from_list(void *ptr) {
 block_list *currblock = allocatedList, *prevblock = NULL;

 while (currblock) {
  if (currblock->ptr ==ptr ) { //if it is equal to the ptr                                                    
   if (!prevblock) {
    allocatedList = currblock->next; //the next block of currblock
   }
   else {
    prevblock->next = currblock->next;  //the next block of prevblock
   }
   free(currblock->filename);  //free the filename of currblock
   free(currblock);  //free the currblock
   return 0;
  }
  prevblock = currblock;  //equal to the currblock
  currblock = currblock->next;  //equal to the next of currblock
 }
 return -1;
}
// one mark

block_list *find_block(void *ptr) {
 block_list *currblock = allocatedList;
 while (currblock) {
  if (currblock->ptr == ptr) {
   return currblock ;  //return currblock
  }
  currblock = currblock->next;
 }
 return NULL;  //return the null pointer
}



int bitCount(int x) {

   
    int m1 = 0x11 | (0x11 << 8);
    int mask = m1 | (m1 << 16);
    int s = x & mask;
    s += x>>1 & mask;
    s += x>>2 & mask;
    s += x>>3 & mask;
   
    s = s + (s >> 16);

   
    mask = 0xF | (0xF << 8);
    s = (s & mask) + ((s >> 4) & mask);
    return (s + (s>>8)) & 0x3F;
}




void *MyMalloc(size_t size, char *filename, int linenumber) {
 char *headptr, *footptr;
 struct header h;
 struct footer f;
 int amount;
 int temp;
 
 h.fence = THEFENCE;
 f.fence  = THEFENCE; //the footer f and its element fence
 h.size = size;
 h.checksum = bitCount(size) + bitCount(h.fence);
 
 
 size += ALIGN - 1;
 size -= size % ALIGN;
 
 headptr = malloc(size + HEADERSIZE + FOOTERSIZE);
 if (!headptr)
  return NULL;
 footptr = headptr + HEADERSIZE + size;  //plus the size as well

 memcpy(headptr, &h, HEADERSIZE);
 memcpy(footptr, &f, FOOTERSIZE);  //FOOTERSIZE as well

 
 amount = (ALIGN - (h.size % ALIGN));
 temp = THEFENCE;
 if (amount > 0) {
  if (amount <= 4) {  //less than 4
   strncpy(footptr - amount, (char *) &temp, amount);
  }
  else {
   strncpy(footptr - amount, (char *) &temp, 4);
   strncpy(footptr - amount + 4, (char *) &temp, amount - 4);
  }
 }


 
 allocatedSize +=  h.size;   //the current value of allocatedSize and h.size

 
 if (add_block_to_list((void *) (headptr + HEADERSIZE), h.size, filename, linenumber) == -1) {
  free(headptr);  //free the headptr
  return NULL;  //free the null pointer
 }

 return (void *) (headptr + HEADERSIZE);
}


int checkBlock(void *ptr) {
 struct header *headptr = (struct header *) ptr - 1;
 struct footer *footptr;  
 int temp = THEFENCE;
 int size = headptr->size, amount; 
 
 if (headptr->fence != THEFENCE) {
  return 1;
 }
 if (headptr->checksum != bitCount(headptr->size) + bitCount(headptr->fence)) {
  return 3;  //return the value 3
 }
 // one mark
 
 size += ALIGN - 1;
 size -= size % ALIGN;
 
 footptr = (struct footer *) ((char *) ptr + size);
 if (footptr ->fence != THEFENCE) {  //the element of fence
  return 2;
 }
 
 
 amount = (ALIGN - (headptr->size % ALIGN));
 if (amount > 0) {  //greater than zero
  if (amount <= 4) {
   if (strncmp((char *) footptr - amount, (char *) &temp, amount) != 0) {
    return 2;  
   }
  }
  else {
   if (strncmp((char *) footptr - amount, (char *) &temp, 4) != 0
    || strncmp((char *) footptr - amount + 4, (char *) &temp, amount - 4) != 0) {
    return 2;  
   }   
  }
 }

 return 0;
}

void MyFree(void *ptr, char *filename, int linenumber) {
 struct header *headptr = (struct header *) ptr - 1;
 block_list *theBlock;   //define the *theBlock
 int ret;
 
 if (!(theBlock = find_block(ptr))) {
  error(4, filename, linenumber);  //the linenumber as well
 }
 if (ret = checkBlock(ptr)) {
  errorfl(ret, theBlock->filename, theBlock->linenum, filename, linenumber);
 }
 
 allocatedSize -= headptr->size;
 free(headptr); 
 remove_block_from_list(ptr);
}


int AllocatedSize() {
 return allocatedSize;  //return the allocatedSize
}

 

 


void PrintAllocatedBlocks() {
 block_list *currblock = allocatedList;
 printf("Currently allocated blocks:\n");
 while (currblock) {
  PRINTBLOCK(currblock->size, currblock->filename, currblock->linenum);
  currblock = currblock ->next;  //point to the next block of currblock
 }
}


int HeapCheck() {
 block_list *currblock = allocatedList;
 int ret = 0, err;
 while (currblock) {
  if (err = checkBlock(currblock->ptr)) {
   ret = -1;
   PRINTERROR(err, currblock->filename, currblock->linenum);
  }
  currblock = currblock->next;  //the currblock points to the next
 } 
 return ret;
}
// one mark with demonstration


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本久久精品一区二区 | www.性欧美| 免费在线观看精品| 青青草国产精品97视觉盛宴| 日韩高清中文字幕一区| 婷婷国产v国产偷v亚洲高清| 日韩电影一区二区三区四区| 亚洲gay无套男同| 婷婷综合在线观看| 久久成人久久鬼色| 国产成人av网站| 91美女视频网站| 欧美中文一区二区三区| 欧美一区二区三区在线观看视频| 欧美一区二区啪啪| 欧美一区二区视频观看视频| 精品国产sm最大网站| 国产欧美一区二区三区鸳鸯浴| 国产欧美日韩三级| 一区二区在线电影| 日本欧美一区二区三区| 国产精品资源网站| 99精品热视频| 911国产精品| 久久久久国产免费免费| 亚洲日本一区二区| 日韩电影在线一区二区三区| 国产精品一区久久久久| 99精品热视频| 日韩精品一区在线| 亚洲天堂免费看| 美女视频一区在线观看| 成人天堂资源www在线| 欧美日韩一区中文字幕| 久久久91精品国产一区二区精品 | 亚洲欧美综合在线精品| 日韩精品久久久久久| 成人免费黄色大片| 欧美另类变人与禽xxxxx| 欧美激情一区二区| 日韩1区2区日韩1区2区| 91首页免费视频| 久久综合给合久久狠狠狠97色69| 亚洲日本va午夜在线电影| 麻豆久久一区二区| 欧美亚洲综合网| 日本一区二区三区在线不卡| 日韩精品一二区| 色婷婷久久久亚洲一区二区三区| 久久女同性恋中文字幕| 亚洲成人一区在线| 99re亚洲国产精品| 国产三级欧美三级日产三级99 | 欧美精品 日韩| 日韩一区在线看| 国产精品一区二区果冻传媒| 69精品人人人人| 亚洲一二三四在线观看| 91影院在线观看| 欧美韩日一区二区三区| 国产一区久久久| 日韩欧美一区二区三区在线| 视频一区二区三区中文字幕| 色婷婷综合久久久久中文一区二区| 国产午夜亚洲精品不卡| 国产又黄又大久久| 精品国产sm最大网站| 久久精品国产亚洲一区二区三区| 欧美人与z0zoxxxx视频| 亚洲一区二区三区在线播放| 在线一区二区三区四区五区| 亚洲美女少妇撒尿| 色88888久久久久久影院按摩| 自拍偷拍国产亚洲| av电影在线不卡| 亚洲色图都市小说| 在线观看亚洲a| 亚洲午夜av在线| 欧美日韩国产综合一区二区| 亚洲国产综合色| 7777精品伊人久久久大香线蕉经典版下载 | 99久久精品99国产精品| 国产精品美女久久久久久久网站| 国产大片一区二区| 国产精品久久久久久久久图文区 | 亚洲成av人片| 欧美一区二区女人| 国产精品一区二区在线观看网站 | 日韩激情一二三区| 日韩精品中午字幕| 成人综合婷婷国产精品久久蜜臀| 中文av字幕一区| 日本道免费精品一区二区三区| 亚洲精品伦理在线| 91精品欧美福利在线观看| 久久精品国产在热久久| 国产精品美女久久久久久久久久久| a级精品国产片在线观看| 亚洲自拍欧美精品| 欧美成人精精品一区二区频| 顶级嫩模精品视频在线看| 亚洲精品国产精华液| 日韩你懂的在线播放| 成人晚上爱看视频| 亚洲v精品v日韩v欧美v专区| 久久蜜桃香蕉精品一区二区三区| 成人av电影免费在线播放| 洋洋av久久久久久久一区| 日韩免费观看高清完整版| 成人精品小蝌蚪| 天天综合日日夜夜精品| 国产亚洲精品免费| 欧美日韩一区不卡| 国产成人av自拍| 日韩精品福利网| 国产精品久久毛片av大全日韩| 欧美精品tushy高清| www.成人在线| 麻豆免费看一区二区三区| 亚洲婷婷在线视频| 久久综合视频网| 欧美精品一级二级| 成人av在线网| 狂野欧美性猛交blacked| 一区视频在线播放| 日韩美女视频在线| 欧美日韩免费一区二区三区| 国产suv精品一区二区6| 亚洲大片精品永久免费| 日韩一区中文字幕| 2020日本不卡一区二区视频| 91麻豆精品国产91久久久使用方法 | 欧美videossexotv100| 色呦呦国产精品| 99精品国产91久久久久久 | 99精品一区二区三区| 裸体一区二区三区| 日韩二区三区四区| 亚洲国产精品影院| 一区二区三区成人在线视频| 中文字幕中文字幕一区| 国产午夜三级一区二区三| 精品国产精品一区二区夜夜嗨| 欧美精品一级二级| 91精品国产麻豆国产自产在线| 欧美综合在线视频| 在线亚洲欧美专区二区| 欧洲精品一区二区| 在线观看视频一区二区| 色美美综合视频| 在线观看91视频| 欧美色涩在线第一页| 欧美日韩三级一区二区| 精品视频在线免费观看| 欧美日韩国产色站一区二区三区| 欧美亚州韩日在线看免费版国语版| 97国产精品videossex| 91久久国产最好的精华液| 欧洲一区二区三区在线| 欧美日本免费一区二区三区| 欧美喷潮久久久xxxxx| 欧美一区二区福利在线| 精品久久久影院| 国产精品女上位| 一区二区三区高清不卡| 日本三级韩国三级欧美三级| 看片网站欧美日韩| 成人小视频免费在线观看| eeuss鲁片一区二区三区| 色婷婷综合在线| 欧美精品精品一区| 精品国产露脸精彩对白 | 欧美熟乱第一页| 91精品久久久久久久91蜜桃| 精品国产1区二区| 国产精品成人午夜| 亚洲福利电影网| 国产剧情av麻豆香蕉精品| 成人黄色免费短视频| 欧美三级电影网站| 精品国产91九色蝌蚪| 亚洲精品成人少妇| 久久av中文字幕片| 色中色一区二区| 久久综合一区二区| 一区二区三区日韩在线观看| 人妖欧美一区二区| 99久久久久免费精品国产| 欧美一区二区视频网站| 国产精品麻豆欧美日韩ww| 天堂久久久久va久久久久| 成人免费精品视频| 日韩一级欧美一级| 亚洲欧美成aⅴ人在线观看| 久久99久久99小草精品免视看| 91亚洲精品一区二区乱码| 久久综合久久综合久久综合| 亚洲一区二区精品视频| 成人高清av在线| 精品久久国产字幕高潮|