- 论坛徽章:
- 2
|
#include <stdlib.h>
#include <string.h>
struct s_memory_block {
unsigned long magid;
#define MEMORY_BLOCK_MAGID 0x010255AAUL
size_t size;
};
void *memory_alloc(size_t size)
{
struct s_memory_block *memblk;
if (size > 0) {
memblk = (struct s_memory_block *)malloc(size + sizeof(struct s_memory_block));
if (memblk != NULL) {
memset(memblk, 0, size + sizeof(struct s_memory_block));
memblk->magid = MEMORY_BLOCK_MAGID;
memblk->size = size;
return memblk + 1;
}
}
return NULL;
}
int memory_free(void *block)
{
struct s_memory_block *memblk;
if (block != NULL) {
memblk = (struct s_memory_blk *)block - 1;
if (memblk->magid == MEMORY_BLOCK_MAGID && memblk->size > 0) {
memset(memblk, 0, memblk->size + sizeof(struct s_memory_block));
free(memblk);
return 0;
}
}
return -1;
}
int memory_freed(void *block)
{
struct s_memory_block *memblk;
if (block != NULL) {
memblk = (struct s_memory_blk *)block - 1;
if (memblk->magid == MEMORY_BLOCK_MAGID && memblk->size > 0) {
return 0;
}
}
return -1;
}
然后用宏定义代替malloc和free |
|