#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *c = malloc(3);
short *s = malloc(3); /* or malloc(3 * sizeof(short))? */
int *i = malloc(3); /* or malloc(3 * sizeof(int))? */
long *l = malloc(3); /* or malloc(3 * sizeof(long))? */
printf("%p\n", c++);
printf("%p\n", c++);
printf("%p\n", c++);
printf("---\n");
printf("%p\n", s++);
printf("%p\n", s++);
printf("%p\n", s++);
printf("---\n");
printf("%p\n", i++);
printf("%p\n", i++);
printf("%p\n", i++);
printf("---\n");
printf("%p\n", l++);
printf("%p\n", l++);
printf("%p\n", l++);
return 0;
}
输出结果为:
0x1e82010 (1 byte)
0x1e82011
0x1e82012
---
0x1e82030 (2 bytes)
0x1e82032
0x1e82034
---
0x1e82050 (4 bytes)
0x1e82054
0x1e82058
---
0x1e82070 (8 bytes)
0x1e82078
0x1e82080
我遗漏了什么吗?
4.0.4-303.fc22.x86_64 clang版本3.5.0(tags/RELEASE_350/final) 目标:x86_64-redhat-linux-gnu 线程模型:posix
char *
部分之外,你都在访问越界的内存。 - Jonathan LefflerNULL
,并获得相同的结果。 - Cornstalks