C 尝试访问sbrk自由空间的阶梯部分后出现seg故障

C 尝试访问sbrk自由空间的阶梯部分后出现seg故障,c,pointers,segmentation-fault,C,Pointers,Segmentation Fault,好的,我有一个结构,看起来像 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; 然后释放一块4MB的空间,并将开始列表指针设置为指向它 size_t max_bytes =

好的,我有一个结构,看起来像

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;
然后释放一块4MB的空间,并将开始列表指针设置为指向它

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));

但这一行给出了一个分段错误。谁能告诉我我做错了什么,或者如何进一步调试?谢谢。

当您执行
自由列表\u b+max\u bytes-sizeof(meta\u t)
时,您正在对指向
meta\u t
结构的指针使用
运算符+
。这比你可能期望的要多得多

更改:

freelist_b
致:

或更改:

max_bytes-sizeof(meta_t)
致:


“有人能告诉我我做错了什么吗”-调试器当然能?这个
freelist\u p
变量来自哪里?请你发一封对不起,改名了,应该是免费的。
max_bytes-sizeof(meta_t)
max_bytes/sizeof(meta_t)-1