Free使用出现崩溃的原因。

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;
}

你可能感兴趣的:(Free使用出现崩溃的原因。)