0
以下是简单的malloc
实现的代码。一个链表用头部和尾部指针进行内存管理。现在在函数中,当列表未初始化时,只有一个调用实现,列表的头部被初始化。一旦我将基础指针返回到main
,程序将给出segmentation fault
。另一方面,下面的test
函数具有几乎相同的参数,除了正确处理链表计算并显示结果之外。任何人都可以告诉我在这里错过什么?用sbrk自定义内存管理
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
typedef struct Items{
size_t size_of_object;
size_t free;
} Items;
typedef struct Node{
void *ptr;
void *next;
Items Item;
}Node ;
typedef struct LinkedList{
Node *head;
Node *tail;
} LinkedList;
LinkedList memory_list;
void *salmalloc(size_t size_of_object) {
if (memory_list.head == NULL) {
memory_list.head = sbrk(sizeof(Node));
memory_list.head->ptr = sbrk(size_of_object);
memory_list.head->Item.size_of_object = size_of_object;
memory_list.tail = NULL;
memory_list.head->next = NULL;
memory_list.head->Item.free = 1;
return memory_list.head->ptr;
}
}
void *test(size_t size) {
void *p = sbrk(size);
return p;
}
void main(){
char *p = NULL;
char a = 'B';
p = salmalloc(sizeof(char));
*p = a;
printf("%c\n", *p);
}
'如果(memory_list.head == NULL)'这哪里是初始化为NULL?为什么显示代码有效?为什么不显示不起作用的代码? – PaulMcKenzie 2014-12-07 15:02:52
@PaulMcKenzie,'salmalloc'函数不起作用。 – user1343318 2014-12-07 15:12:08
'另一方面,下面的测试函数几乎具有相同的参数,除了复杂的链表处理正确计算并显示结果。“您发布的函数是否也是如此? – PaulMcKenzie 2014-12-07 15:13:56