gpt4 book ai didi

c - sbrk(size_t) 中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:12 24 4
gpt4 key购买 nike

我的程序很简单,

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

当我调试它时,它显示:

程序接收到信号 SIGSEGV,段错误。TO_INT((pool_tail - 3)) = BUF_LENGTH * -1;

pool_tail 和 pool_head 的值:

pool_tail = 0x805a000

pool_head = 0x804a000

如何解决?谢谢!

最佳答案

首先,您不能对 void * 执行指针运算 (pool_tail - 3)。

其次,即使我们允许它并将 pool_tail 视为 char *,将 pool_tail 减去 3 也无法提供足够的空间来容纳int.

关于c - sbrk(size_t) 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10942041/

24 4 0
文章推荐: html - 如何在容器内的 div 中居中放置 div?
文章推荐: css - 如何将包装器
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com