我的程序很简单,
...
#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
如何解决?谢谢!
答案 0 :(得分:2)
首先,您无法在pool_tail - 3
上执行指针运算(void *
)。
其次,即使我们允许并将pool_tail
视为char *
,将pool_tail
减去3也不足以容纳int
。