コード例 #1
0
ファイル: MemDebug.cpp プロジェクト: turbanoff/X-plore
void *DebugRealloc(void *vp, size_t sz) {

    if(!vp)
        return DebugAlloc(sz);
    if(!sz) {
        DebugFree(vp);
        return NULL;
    }
    return _DebugRealloc(vp, sz);
}
コード例 #2
0
ファイル: lterrors.c プロジェクト: chadheyne/cuneiform-by
void * DebugRealloc(void * old_blk,size_t size)
        {
        void * new_blk;
        Memory * Block;

             if(lout_memory==NULL)
                        ErrorInternal("Realloc:Кучи еще нет!");
	     if(size == 0)
		return NULL;
             if(old_blk==NULL){
                        new_blk=DebugMalloc(size);
                        return new_blk;
                        }

             if((Block=FindMem(old_blk))==NULL)
                        ErrorInternal("\nИсходный буфер для REALLOC не найден!");

             if(Block->size <= size + sizeof(Memory)){
             // требуется блок больших размеров
             new_blk=DebugMalloc(size);

           if(new_blk!=NULL && old_blk!=NULL)
              memcpy(new_blk,old_blk,(Block->size<=size ? Block->size:size));

             if(old_blk!=NULL)
                 DebugFree(old_blk);
             }
             else {
             // требуется блок меньших размеров
             Memory * NewBlock      = (Memory *)((char *)Block + size + sizeof(Memory));
                      NewBlock->id  = MEMFREE;
                      NewBlock->size= Block->size-(size+sizeof(Memory));

                      SizeFree     += NewBlock->size;

                      Block->size   = size;
                      new_blk       = old_blk;
#ifdef DebugFile
                if(FileError){
                        fprintf(FileError,"\nRealloc \t= %8li\tRunning \t= %li\tAll %li",
                                (long)Block->size,
                                SizeAllocate-SizeFree,
                                SizeMemory);
                        }
#endif

             }

        return new_blk;
        }