@@ -49,6 +49,7 @@ team_t team = {
49
49
#define FOOTER_SIZE 8
50
50
51
51
size_t * freeList = (size_t * )0xFFFFFFFF ;
52
+ int freeListSize = 0 ;
52
53
53
54
/*
54
55
* mm_init - initialize the malloc package.
@@ -78,7 +79,7 @@ void *mm_malloc(size_t size)
78
79
// if (nextPtr == (size_t*)0xFFFFFFFF) {
79
80
p = mem_sbrk (newSize );
80
81
// break;
81
- // } else if (*(int*)((char*)nextPtr - sizeof(int) ) >= size) {
82
+ // } else if (*(int*)((char*)nextPtr - 4 ) >= size) {
82
83
// p = (void*)((char*)nextPtr - 5);
83
84
// *lastPtr = *nextPtr;
84
85
// break;
@@ -106,25 +107,47 @@ void *mm_malloc(size_t size)
106
107
void mm_free (void * pointer )
107
108
{
108
109
int size ;
110
+ int found = 0 ;
109
111
char * ptr = (char * )pointer - HEADER_SIZE ; //points to the start of the free block
110
112
size_t * nextPtr ;
111
113
size_t * lastPtr ;
114
+
115
+ /* ---Vars for loop debugging--- */
116
+ size_t * storedPtr ;
117
+ int stored = 0 ;
118
+ int loopSize = 0 ;
119
+ int loopEnd = 0 ;
112
120
int j = 0 ; //LL node counter - for debugging
121
+ /* ------ */
113
122
114
123
size = * (int * )((char * )ptr + 1 ); //extracts size from malloc'ed metadata
115
124
116
125
nextPtr = (size_t * )freeList ;
117
126
lastPtr = (size_t * )& freeList ;
118
127
119
- while (1 ) {
120
- if ((nextPtr == (size_t * )0xFFFFFFFF ) /* || (*(int*)((char*)nextPtr - sizeof(int)) >= size)*/ ) { //if found or at end
128
+ while (found == 0 ) {
129
+ if ((nextPtr == (size_t * )0xFFFFFFFF ) || (* (int * )((char * )nextPtr - 4 ) >= size )) { //if found or at end
121
130
* lastPtr = (size_t * )((char * )ptr + 5 );
122
131
* (size_t * )((char * )ptr + 5 ) = (size_t * )nextPtr ;
123
- break ;
132
+ freeListSize ++ ;
133
+ found = 1 ;
124
134
} else { //if not, keep looking through list
125
135
lastPtr = nextPtr ;
126
- nextPtr = (size_t )* nextPtr ;
136
+ nextPtr = (size_t * )* nextPtr ;
127
137
j ++ ;
138
+ if (j > freeListSize ) { //loop occuring - fix loop
139
+ if (stored == 0 ) {
140
+ stored = 1 ;
141
+ storedPtr = lastPtr ;
142
+ }
143
+ if (storedPtr == nextPtr && loopSize > 2 ) {
144
+ * nextPtr = (size_t * )0xFFFFFFFF ;
145
+ loopEnd = 1 ;
146
+ }
147
+ if (loopEnd == 0 ) {
148
+ loopSize ++ ;
149
+ }
150
+ }
128
151
}
129
152
}
130
153
0 commit comments