📄 mems.cpp
字号:
#include "mems.h"
void *safe_alloc(size_t items, size_t size)
{
LPVOID ptr;
if(heapptr == NULL)
{
heapptr = HeapCreate(HEAP_GENERATE_EXCEPTIONS,
65536, 0);
if(heapptr == NULL)
{
printf("Could Not Create Heap for strings\n");
exit(0);
}
}
ptr = HeapAlloc(heapptr,HEAP_ZERO_MEMORY,items*size);
if(ptr)
return((void *)ptr);
else
{
printf("HeapAlloc Failed...Compacting Heap Free Space\n");
if(HeapCompact(heapptr,0) > 0)
{
ptr = HeapAlloc(heapptr,HEAP_ZERO_MEMORY,items*size);
if(ptr)
{
printf("Compaction & Allocation Successful\n");
return((void *)ptr);
}
}
if(HeapValidate(heapptr,0,NULL))
printf("Failed to allocate from valid Heap\n");
else
printf("Compaction failed...Corrupted Heap\n");
exit(0);
}
return(NULL);
}
void *safe_realloc(size_t items, size_t size, LPVOID ptr)
{
if(heapptr == NULL)
{
heapptr = HeapCreate(HEAP_GENERATE_EXCEPTIONS,
65536, 0);
if(heapptr == NULL)
{
printf("Could Not Create Heap for strings\n");
exit(0);
}
}
if (ptr!= NULL)
{
// int retVal=HeapValidate(heapptr,0,NULL);
// printf("\nHeap state %d", retVal);
// HeapFree(heapptr,0,(LPVOID)ptr);
// HeapAlloc(heapptr, HEAP_ZERO_MEMORY, items*size);
ptr = HeapReAlloc(heapptr,0, ptr, items*size);
}
else
ptr = HeapAlloc(heapptr,HEAP_ZERO_MEMORY,items*size);
if(ptr)
return((void *)ptr);
else
{
int err=GetLastError();
printf("HeapAlloc Failed...Compacting Heap Free Space\n %d", err);
if(HeapCompact(heapptr,0) > 0)
{
ptr = HeapReAlloc(heapptr,HEAP_ZERO_MEMORY, ptr, items*size);
if(ptr)
{
printf("Compaction & Allocation Successful\n");
return((void *)ptr);
}
}
if(HeapValidate(heapptr,0,NULL))
printf("Failed to allocate from valid Heap\n");
else
printf("Compaction failed...Corrupted Heap\n");
exit(0);
}
return(NULL);
}
void safe_free(void *memobj)
{
int err=0;
try
{
HeapFree(heapptr,0,(LPVOID)memobj);
memobj=NULL;
}
catch(...)
{
err=GetLastError();
}
}
// free(memobj);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -