cat maps
由于当进程存在时那个pid文件夹才存在,所以你需要写一个死循环保证程序一直在运行
#include
#include
int main()
{
printf("%d\n",getpid());
while(1){}
}
导致malloc/free/callo/realloc不正常工作
这就是为什么连续使用 malloc 分配的首地址 之间的间隔不等于分配的空间大小的原因.
这就是为什么动态分配的空间, 越界修改后,会导致malloc/free/callo/realloc不正常工作的原因,
示例: 发现每个地址之间相差16. new的情况和这样一样
#include
#include
int main()
{
int *p1 = (int *)malloc(4);
int *p2 = (int *)malloc(8);
int *p3 = (int *)malloc(16);
int *p4 = (int *)malloc(8);
int *p5 = (int *)malloc(8);
int *p6 = (int *)malloc(4);
int *p7 = (int *)malloc(4);
printf("%p\n",p1); // %p输出地址, %x 输出16进制,后面只能是整形
printf("%p\n",p2);
printf("%p\n",p3);
printf("%p\n",p4);
printf("%p\n",p5);
printf("%p\n",p6);
printf("%p\n",p7);
/*
0x881b008
0x881b018
0x881b028
0x881b038
0x881b048
0x881b058
0x881b068
*/
}
示例: 越界赋值后出现错误
#include
#include
#include
main()
{
int* p1 =(int*)malloc(4);
int* p2 =(int*)malloc(16);
int* p3 =(int*)malloc(4);
*p1 =1;
*(p1+1)=2;
*(p1+2)=3;
*(p1+3)=4;
*(p1+4)=5;
*(p1+5)=6;
*(p1+6)=7;
*(p1+7)=8;
printf("*p2:%d\n",*p2); //5
//free(p1); // 会出严重问题
/*
堆的结构:
1 指向本空间的指针
2 指向上一个空间的指针
3 指向下一个空间的指针
4 本空间的大小
*/
}
这是因为修改了结构体里面的其它部分的值.
#include
#include
int main()
{
int a[20];
int *p = new(a) int; // 定位分配运算符
}