sbrk中的分段错误(size_t)

时间:2012-06-08 01:34:37

标签: c linux memory-management malloc sbrk

我的程序很简单,

...
#define TO_INT(a) (*(int *)a)
void *pool_head;
void *pool_tail;
...

pool_head = sbrk(BUF_LENGTH);
if (pool_head == (void *)-1) {
    errno = ENOMEM;
    return pool_head;
}
pool_tail = sbrk(0);
TO_INT(pool_head)     = BUF_LENGTH * -1;
TO_INT((pool_tail - 3)) = BUF_LENGTH * -1;

当我调试它时,显示:

Program received signal SIGSEGV, Segmentation fault.

TO_INT((pool_tail - 3)) = BUF_LENGTH * -1;

pool_tail&的价值pool_head:

pool_tail = 0x805a000

pool_head = 0x804a000

如何解决?谢谢!

1 个答案:

答案 0 :(得分:2)

首先,您无法在pool_tail - 3上执行指针运算(void *)。

其次,即使我们允许并将pool_tail视为char *,将pool_tail减去3也不足以容纳int