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