⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mems.cpp

📁 基于单片机的 snmp协议解析的一些原代码 给有用的 同行
💻 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 + -