#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