【发布时间】:2016-07-18 18:25:48
【问题描述】:
我编写了一个输入 3 个数字的程序:
-
malloc()在堆中分配的内存大小
-
- 两个
int值
- 两个
如果q 是一个unsigned char 指针,它会将q[i]=b 从q[min] 传递到q[max]。
我认为堆是按页划分的,第一次调用malloc() 会给出一个指向我的进程页的第一个字节的指针。那么为什么如果尝试获取q[-1] 我的进程没有被杀死呢?
然后我尝试了另一个指针p,我注意到两个指针之间有32字节的距离,为什么它们不相邻?
我注意到的最后一件事是p[-8]=q[-40(-32-8)] 和q[-8] 都有数字33 00100001(所有其他字节都设置为0),这意味着什么?
谢谢!
【问题讨论】:
-
思考未定义行为的含义。请指出标准中需要特定动态内存分配方案的部分。甚至不需要基于堆的机制。
标签: c malloc heap-memory