Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : free pointers
authorMarion Guthmuller <marion.guthmuller@loria.fr>
Sun, 3 Jun 2012 07:00:48 +0000 (09:00 +0200)
committerMarion Guthmuller <marion.guthmuller@loria.fr>
Sun, 3 Jun 2012 07:00:48 +0000 (09:00 +0200)
src/xbt/mmalloc/mm_diff.c

index 14adfa2..566e7d9 100644 (file)
@@ -382,18 +382,37 @@ const char* get_addr_memory_map(void *addr, void* s_heap, void* r_heap){
     if((addr > start_addr) && ( addr < end_addr)){
       free(line);
       fclose(fp);
     if((addr > start_addr) && ( addr < end_addr)){
       free(line);
       fclose(fp);
-      if(start_addr == s_heap)
+      if(start_addr == s_heap){
+       xbt_dynar_reset(lfields);
+       xbt_free(lfields);
+       xbt_dynar_reset(start_end);
+       xbt_free(start_end);
        return "std_heap";
        return "std_heap";
-      if(start_addr == r_heap)
+      }
+      if(start_addr == r_heap){
+       xbt_dynar_reset(lfields);
+       xbt_free(lfields);
+       xbt_dynar_reset(start_end);
+       xbt_free(start_end);
        return "raw_heap";
        return "raw_heap";
-      if(xbt_dynar_length(lfields) == 6)
+      }
+      if(xbt_dynar_length(lfields) == 6){
        return xbt_dynar_get_as(lfields, xbt_dynar_length(lfields) - 1, char*);
        return xbt_dynar_get_as(lfields, xbt_dynar_length(lfields) - 1, char*);
-      else
+      }else{
+       xbt_dynar_reset(lfields);
+       xbt_free(lfields);
+       xbt_dynar_reset(start_end);
+       xbt_free(start_end);
        return "Anonymous";
        return "Anonymous";
+      }
     }
 
   }
 
     }
 
   }
 
+  xbt_dynar_reset(lfields);
+  xbt_free(lfields);
+  xbt_dynar_reset(start_end);
+  xbt_free(start_end);
   free(line);
   fclose(fp);
   return "Unknown area";
   free(line);
   fclose(fp);
   return "Unknown area";