настоящее время я использую статическую структуру, которая выглядит следующим образом:статическая структура не работает правильно
typedef struct chunk_tag {
struct chunk_tag *next;
struct chunk_tag *prev;
int size;
} chunk_t;
chunk_t *morecore(int new_bytes);
Он имеет размер, следующий и пред.
Прямо под этим я имею строки:
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++;
}
Как вы можете видеть, им пытаются положить что-то в размере ровера , Строка выше ставит нуль в первый размер. Но когда размер ровера должен равняться этому маленькому уравнению, он segfaults. Я знаю его не уравнение, потому что, когда я помещаю его в первый размер, он работает правильно. Даже если я попытаюсь положить 0 в размер ровера, то это произойдет.
Любые мысли?
Я не уверен, что понимаю, что вы имеете в виду. – user081608
О, если я поставлю его ниже Rover-> prev и следующей строки, которую вы говорите? – user081608
@ user081608 Положите эту строку после того, как вы * присвойте * 'Rover' (т. Е. Строку' Rover = First-> next; '). –