#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
char *p1=(char *)malloc(1024); //1k
char *p2=(char *)malloc(4096); //4k
memset(p2,0,4096);
char *p3=(char *)malloc(8192); //8k
char *p4=(char *)malloc(128*1024*1024); //128k
char *p5=(char *)malloc(115*1024);//115k
printf("p1=%p p2=%p p3=%p p4=%p p5=%p\n",p1,p2,p3,p4,p5);
memset(p2,'1',20);
free(p2);
memset(p2,'y',10);
printf("p2=%s\n",p2);
free(p3); //core
free(p5);
free(p1);
}
输出: p1=0x1c60010 p2=0x1c60420 p3=0x1c61430 p4=0x7ffbabc2b010 p5=0x1c63440
p2=yyyyyyyyyy?
Segmentation fault (core dumped)
1.p2-p2 为啥不是 1024
2.p4 的地址为啥和其它的不一样
3.为啥在 free(p2)之后还能读写 p2
4.为啥 p2 的打印不是 yyyyyyyyyy1111111111
5.为啥在 free(p3)的时候会 core
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.