gpt4 book ai didi

C - sbrk(size) 返回有效指针,但 sbrk(0) 为负值

转载 作者:行者123 更新时间:2023-11-30 19:09:45 31 4
gpt4 key购买 nike

我的分配代码是

dat* data = NULL;
data = sbrk(SIZE);
if((int) data != -1){
return data
}else{
printf("Not enough space");
}

sbrk(...) 函数返回一个有效地址 (0x603021),但是当我进入 gdb 并打印 sbrk(0) 时,我得到十六进制值 0xffffffff8060341。经过数学计算,我发现指针 0x8060341 应该是 sbrk(0)。前面的字母 f(即 0xfffff...)从哪里来?

最佳答案

gdb 正在向您显示内存段的完整 64 位地址。十六进制的 64 位地址需要总共 16 个十六进制数字(0-9、A-F)才能完整指定。从 64 位/每位 4 位 = 16。

如果您看到的内容较少,那是因为编辑器截断了内存地址的前 32 位(8 个十六进制数字),只显示剩余的或较低的 8 位。这是 32 位计算世界的遗留问题,其中 8 个十六进制数字足以完全指定内存地址。

关于C - sbrk(size) 返回有效指针,但 sbrk(0) 为负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42638445/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com