我不确定是否理解您的问题,但您为什么不尝试以下方法:
#define MEM_BUFFER 4096
#define size_t unsigned int
char heap_space[MEM_BUFFER] = {0};
struct myblock
{
struct myblock *next;
struct myblock *prev;
int size;
char *buffer;
};
void *malloc(size_t size)
{
struct myblock *tmp = heap_space;
if (tmp != 0) // != 0 since NULL is in stdlib
while (tmp->next != 0)
tmp = tmp->next;
struct myblock *new_elem = tmp; //your question I guess
new_elem->prev = tmp;
new_elem->size = size;
new_elem->buffer = new_elem + sizeof(*new_elem);
new_elem->next = new_elem->buffer + new_elem->size;
return (new_elem->buffer);
}
int main()
{
char *str1 = malloc(10);
char *str2 = malloc(10);
strcpy(str1, "Hello");
strcpy(str2, "World");
printf("%s %s\n", str1, str2);
}
我猜你应该以不同的方式思考你的记忆,在你的 heap_space 里面你可以有很多东西。
如果您有不明白的地方,请询问。
您还应该使用 void * 和 unsigned int 而不是 int
此外,您还有一些事情要做:
- 检查所需的大小是否在您的阵列中可用
- 如果您想实现您的 realloc,请提供更多空间
- 实现你的自由功能
如果你在 linux 上,你应该尝试使用 brk/sbrk 而不是拥有你的“堆空间”。但最棒的是使用自己的 malloc 运行“真实”程序(使用 LD_PRELOAD)