【发布时间】:2019-01-27 22:42:03
【问题描述】:
我正在尝试了解内存在 C 中是如何工作的,所以我现在正在尝试 sbrk 函数。我知道sbrk(0)应该返回当前的程序中断,也就是数据段的结束。
所以我尝试多次调用sbrk(0),但由于某种原因,我得到的第一个值与其他值不同。比如这个程序
#include <stdio.h>
#include <unistd.h>
int main()
{
void * currpb = sbrk(0);
printf("The current program break is: %p.\n", currpb);
void * newpb = sbrk(0);
printf("The current program break is: %p.\n", newpb);
void *new2pb = sbrk(0);
printf("The current program break is: %p.\n", new2pb);
void *new3pb = sbrk(0);
printf("The current program break is: %p.\n", new3pb);
}
给我以下输出:
The current program break is: 0x18b0000.
The current program break is: 0x18d1000.
The current program break is: 0x18d1000.
The current program break is: 0x18d1000.
不确定为什么第一个值与其他三个值不同,有什么想法吗?
【问题讨论】:
-
(您的 printfs 错误;
new2pb不是int。)Fixed demo -
嗯,那是什么?
-
错误...
void *?这是你的变量,你应该知道,你做到了! :-) 您需要%p格式说明符,或者将指针转换为适当的整数类型(例如uintptr_t)并使用适当的说明符。但是%p应该可以很好地展示这种情况。 (顺便说一句,好问题。) -
是的,有道理,好的,我使用了 %p,它返回了地址,我将编辑我的问题
-
对于这样一个特定问题的欺骗从未如此准确。确实,当我看到这个问题时,我以为是那个老问题因为某种原因被撞了。