//my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben. //Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke //miteinander verschmolzen werden. void my_free(void* p) { if(!b_initialized) { return; } //TODO - WIP - needs testing - works //DEBUG //printf("mfree: look for pointer..\n"); // SUCHE NACH DEM BLOCK MIT ZEIGER <p> memoryBlock *block = head; while (block != NULL){ if(block->data == p){ break; }else{ block = block->nextBlock; } } // FALLS KEINER GEFUNDEN WURDE, GEBE EINE MELDUNG AUS. if(block == NULL){ printf("free: error: Given pointer is no memory block\n"); return; } //FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK block->state = not_allocated; //FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN mergeFreeBlocks(); }
//my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben. //Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke //miteinander verschmolzen werden. void my_free(void* p) { if(!b_initialized) { return; } //TODO - DONE //FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK memoryBlock* block; block = p - memoryBlockHeaderSize; block->state = not_allocated; //FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN mergeFreeBlocks(); }
//my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben. //Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke //miteinander verschmolzen werden. void my_free(void* p) { if(!b_initialized) return; // SUCHE NACH DEM BLOCK MIT ZEIGER <p> memoryBlock* block = head; while(block != NULL && block->data != p) block = block->nextBlock; // FALLS KEINER GEFUNDEN WURDE, GEBE EINE MELDUNG AUS. if(block == NULL) { printf("Not a valid pointer\n"); return; } //FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK block->state = not_allocated; //FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN mergeFreeBlocks(); }
// my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben. // Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke // miteinander verschmolzen werden. void my_free(void* p) { if(!b_initialized) { return; } // TODO // SUCHE NACH DEM BLOCK MIT ZEIGER <p> if(!p) return; memoryBlock *last = 0; memoryBlock *block = head; // TODO // SUCHE NACH EINEM GEEIGNETEN FREIEN SPEICHERBLOCK, MIT MEHR ALS <byteCount> // VIELEN BYTES // do { if(block->data == p) break; last = block; block = block->nextMemBlock; } while(block != 0); if(block == 0) return; // FALLS KEINER GEFUNDEN WURDE, GEBE EINE MELDUNG AUS. // FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK block->state = not_allocated; // FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN mergeFreeBlocks(); }