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