好,所以我有一个看起来像
的结构typedef struct meta {
size_t size;
struct meta* next;
struct meta* prev;
} meta_t;
我还静态地分配开始列表指针和最终列表指针为:
static meta_t* freelist_b = NULL;
static meta_t* freelist_e = NULL;
我释放了一个4 MB空间的块,并将起始列表指针设置为
size_t max_bytes = ALIGN(1024*1024*4);
freelist_b = (meta_t*) sbrk(max_bytes);
然后我尝试在列表指针的末尾做同样的事情
freelist_e = memcpy(freelist_b+max_bytes-sizeof(meta_t),freelist_b,sizeof(meta_t));
但是这条线给出了分割故障。谁能告诉我我在做什么错或如何进一步调试?谢谢。
执行freelist_b+max_bytes-sizeof(meta_t)
时,您将在meta_t
结构的指针上使用operator+
。这增加了比您期望的要多得多。
更改:
freelist_b
to:
(char*)freelist_b
或更改:
max_bytes-sizeof(meta_t)
to:
max_bytes/sizeof(meta_t)-1