c - 尝试访问 sbrk 可用空间的梯子部分后出现段错误

标签 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;

然后我释放一个 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/

相关文章:

c - 在代码中间定义变量可能会产生编译错误

c - 将函数重新声明为 int K&R 6.3

c - C 中的指针和循环

c - 取消初始化整数指针的赋值

c - 表达式必须是指向完整对象类型的指针

c - 组成最小的数

c - C 中质量最好的抖动库

c++ - 移植Qt程序(Windows到linux)段错误

Ruby 1.8.6 `gem install` 段错误与 "abort trap 6"

c++ - 与文件 i/o 相关的 c++ 程序末尾的段错误