1.越界.漏写sizeof,realloc第二个参数写错。
int main()//free崩溃情景1
{
int *p = (int *)malloc(10*sizeof(int));
for(int i=0;i<=10;i++)
{
p[i] = 0;
}
free(p);
return 0;
}
2.修改了指针的指向,p++。
int main()//情景2
{
int *p = (int *)malloc(10*sizeof(int));
for(int i=0;i<10;i++)
{
*p = 0;
p++;
}
free(p);
return 0;
}
3.重复释放同一段内存。
int main()//情景3
{
int *p = (int *)malloc(10*sizeof(int));
for(int i=0;i<10;i++)
{
p[i] = i;
}
int *q = (int *)malloc(20*sizeof(int));
for(int i=0;i<10;i++)
{
q[i] = p[i];
}
free(p);
p = q;
q = NULL;
///
free(p);
free(q);
return 0;
}
4.释放非动态内存。
int main()//情景4
{
int arr[10];
free(arr);
return 0;
}