常见的动态内存开辟错误

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/flf1234567898/article/details/102458213

1:对空指针(NULL)的解应用操作
看代码


void test()
{
	int* p = (int*)malloc(50);
	*p = 20;
	free(p);
}


直接对开辟空间进行判断,少了对这个指针是否为空指针的判断,如果动态申请空间不成功就会将空指针返回,直接对空指针进行操作必然导致错误。
2:动态空间的越界访问


void test()
{
	int* p = (int*)malloc(2);
	if (*p == NULL)
		return;
	for (int i = 0; i < 8; i++)
	{
		printf("%d", p[i]);
	}
	free(p);
}

这种情况会直接导致程序崩溃
3:对非动态空间内存的free()释放

void test()
{
	int a = 10;
	int* p = &a;
	free(p);
}

4:用free释放动态内存空间的一部分

void test()
{
	int* p = (int*)malloc(10);
	if (p = NULL)
	{
		return;
	}
	for (int i = 0; i < 5; i++)
	{
		printf("%d", *p++);
	}
	free(p);
}

释放动态内存的一部分也是错误的
5:对同一块动态内存空间的多次释放

void test()
{
	int* p = (int*)malloc(10);
	if (p = NULL)
	{
		return;
	}
	free(p);
	free(p);
}

6:内存泄漏(开辟未释放)


void test()
{
	int* p = (int*)malloc(10);
	if (p = NULL)
	{
		return;
	}
}

没有free()会导致内存泄漏

猜你喜欢

转载自blog.csdn.net/flf1234567898/article/details/102458213