【发布时间】:2018-11-05 03:15:17
【问题描述】:
考虑以下代码:
int *p;
p = malloc(1);//p can point to 1 byte memory area
为什么p 可以指向很多像下面这样的内存区域?
printf("%p %p %p %p %p",p,p+1,p+2,p+3,p+4);
【问题讨论】:
-
C 上没有训练轮。您可以创建
p = 0;然后取消引用p只是为了享受 SegFault。知道你分配了哪些内存以及哪些是有效的完全取决于你……这就是 C 获得极大速度的地方。它把正确“编程”的责任放在你身上。如果您分配1-byte,则由您来确保每次使用该分配访问的次数不超过1-byte。这正是它应该的方式。作为程序员,您可以完全控制程序使用的每个内存字节——明智地使用它。
标签: c memory-management malloc pointer-arithmetic