diff --git a/alloc.c b/alloc.c index 3c6006169566fc4af695a3d9051b3d71dca469ad..e43fde7f2dbad6ba965e46634ec5e709fa4297b5 100644 --- a/alloc.c +++ b/alloc.c @@ -102,46 +102,36 @@ void m_realoc(void* p,uint32_t size){ void m_free(void *ptr){ int index = *(int *)ptr; int count = 0; + meta* tmp_head; meta* temp = head; int size = head -> size; int break_point = 0; - while(1){ - if(count == index) - break; - - temp = temp -> next_memory; - if(temp -> free == 0) - count++; - } - while(1){ - if(temp -> next_memory == NULL){ + if(temp -> next_memory != NULL){ if(temp -> next_memory -> free == 1){ size += temp -> next_memory -> size; - temp -> next_memory = temp -> next_memory -> next_memory; + tmp_head -> next_memory = temp -> next_memory -> next_memory; + temp -> next_memory -> next_memory -> prev_memory = tmp_head; } - else - break; } else - break; - } - while(1){ - if(temp -> prev_memory == NULL){ + tmp_head -> next_memory = NULL; + + if(temp -> prev_memory != NULL){ if(temp -> prev_memory -> free == 1){ size += temp -> prev_memory -> size; - temp -> prev_memory = temp -> prev_memory -> prev_memory; + tmp_head -> prev_memory = temp -> prev_memory -> prev_memory; + temp -> prev_memory -> prev_memory -> next_memory = tmp_head; } - else - break; } else - break; - } - temp -> free = 1; + tmp_head -> prev_memory = NULL; + + tmp_head -> free = 1; + tmp_head -> size = size; strcpy(temp -> comment," "); if( index == 0) - head == temp -> next_memory; + head == tmp_head -> next_memory; } diff --git a/main b/main index 90eb02129370e40d37a4f7e2bd1d6f380ec0e167..b33515706675bf9b67bc29f1370cc11e86e34237 100755 Binary files a/main and b/main differ