【发布时间】:2016-07-18 01:57:15
【问题描述】:
我现在使用的是 OS X 10.10.5,我正在做一个关于 malloc 和 heap 的实验,如下所示:
#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();
}
输出是the malloc p pointer addr is c3404ba0;
我认为地址0xc3404ba0 是由maclloc 作为进程堆的一部分分配的。
我们可以看到0xc3404ba0 不在堆区,但它实际上是指向已分配内存的指针。那有什么问题?
现在修复了,当我使用 %p 而不是 %x 时,输出为 the malloc p pointer addr is 0x7fe131404ba0
vmmap 输出为:
感谢@Alex Lop。
【问题讨论】:
-
看起来您在 64 位操作系统上运行。如果您的程序是在 64 位模式下编译的,那么使用
%x打印指针将切断高 32 位。改用%p尝试相同的方法并发布结果。
标签: c pointers memory memory-management