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