我现在使用的是 OS X 10.10.5,我正在做一个关于 malloc 和堆的实验,如下所示:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p;
p = malloc(sizeof(int));
*p = 100;
printf("the malloc p pointer addr is %x\n", p);
getchar();
}
输出是malloc p指针地址是c3404ba0
;
我认为地址 0xc3404ba0
是由 maclloc 作为进程堆的一部分分配的。
我们可以看到0xc3404ba0
不在堆区,但它确实是指向已分配内存的指针。这有什么问题吗?
现在修复了,当我使用 %p 而不是 %x 时,输出是 the malloc p pointer addr is 0x7fe131404ba0
vmmap 输出为:
感谢@Alex Lop。
最佳答案
正如我在评论中所写,看起来您正在运行 64 位操作系统。如果您的程序是在 64 位模式下编译的,那么使用 %x
打印指针将截断高 32 位(因为 %x
用于整数)。尝试用 %p
代替并发布结果。
我的猜测是 0xXXXXXXXXc3404ba0
属于该范围:
关于c - 为什么 malloc 返回值不在进程内存映射中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302476/