我目前使用的是靜態結構,看起來像下面這樣:靜態結構工作不正常
typedef struct chunk_tag {
struct chunk_tag *next;
struct chunk_tag *prev;
int size;
} chunk_t;
chunk_t *morecore(int new_bytes);
它的大小,next和prev。
下這個權利我有臺詞:
static chunk_t * First = NULL;
static chunk_t * Rover = NULL;
然後進入,看起來像這樣的功能:
void *Mem_alloc(int nbytes)
{
chunk_t *p = NULL;
//chunk_t *q = NULL;
chunk_t *best;
int blocks;
blocks = nbytes/sizeof(chunk_t);
if(nbytes % sizeof(chunk_t) != 0)
{
blocks++;
}
if(First == NULL)//means new page
{
First = morecore(PAGESIZE);
if(First == NULL)
{
return p;
}
First->size = 0;
Rover->size = PAGESIZE/sizeof(chunk_t)-1; //this line segfaults
First->prev = (First + 1);
First->next = (First + 1);
Rover = First->next;
Rover->prev = First;
Rover->next = First;
requests++;
}
正如你可以看到我嘗試把東西放到月球車大小。上面的行將零放入第一個尺寸。但是,當漫遊車的大小應該等於那個小的等式時,就會發生段錯誤。我知道它不是這個方程式,因爲當我把它放到第一個尺寸時它就能正常工作。即使我嘗試將0設置爲流動站大小,它也會出現故障。
有什麼想法?
林不知道我明白你的意思。 – user081608
哦,如果我把它放在Rover-> prev和next line的下面你說的? – user081608
@ user081608將*行賦予'Rover'(即'Rover = First-> next;'line)之後放置該行。 –