0

私のプログラムはとてもシンプルで、

...
#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

それを解決する方法は?ありがとうございました!

4

1 に答える 1

2

pool_tail - 3まず、 に対してポインター演算 ( ) を実行することはできませんvoid *

pool_tail第 2 に、許容してとして扱っても、3char *を引いpool_tailても を収める十分な余地がありませんint

于 2012-06-08T01:42:22.347 に答える