C-试图访问SBRK自由空间的梯子之后的SEG故障



好,所以我有一个看起来像

的结构
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

相关内容

  • 没有找到相关文章

最新更新