diff --git a/mm.c b/mm.c index e3b4924..04fbc18 100644 --- a/mm.c +++ b/mm.c @@ -104,8 +104,11 @@ team_t team = { #define PUT_PTR(p, ptr) (*(unsigned int *)(p) = (unsigned int)(ptr)) -#define PRV_FREE(bp) ((char *)(bp)) -#define NXT_FREE(bp) ((char *)(bp) + WSIZE) +#define PRV_PTR(ptr) ((char *)(ptr)) +#define NXT_PTR(bp) ((char *)(bp) + WSIZE) + +#define PRV_BLK(bp) (*(char **)(bp)) +#define NXT_BLK(bp) (*(char **)(NXT_PTR(bp))) //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////// STATIC VARS ///////////////////////////////// @@ -134,6 +137,14 @@ static void add_free(void* ptr, size_t size) { int szClass = getSzClass(size); void* classPtr = seg_list[szClass]; + + while(classPtr != NULL) + { + classPtr = NXT_PTR(classPtr); + } + PUT_PTR(NXT_PTR(classPTR), ptr) + PUT_PTR(PRV_PTR(ptr), classPtr) + PUT_PTR(NXT_PTR(ptr), NULL); } static void place(void *bp, size_t asize) @@ -165,13 +176,13 @@ static void* best_fit(void* ptr, size_t asize) { unsigned long left_over = GET_SIZE(ptr) - asize; void* bestfit = ptr; int best_left_over = GET_SIZE(ptr) - asize); - while (NXT_FREE(ptr) != NULL) { + while (NXT_PTR(ptr) != NULL) { left_over = GET_SIZE(ptr) - asize); if(left_over