好的,所以我有一个看起来像的结构
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 的空间 block 并将开始列表指针设置为它
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
致:
(char*)freelist_b
或者更改:
max_bytes-sizeof(meta_t)
致:
max_bytes/sizeof(meta_t)-1
关于c - 尝试访问 sbrk 可用空间的梯子部分后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21391014/