您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

动态分配内存常见错误

1.对空指针的解引用操作

void test()
{
	int* p = (int*)malloc(40);
	*p = 20;//如果p的值为NULL,就会出现错误
	free(p);
}

在进行动态内存开辟之后,一定要判断是否开辟成功,因为开辟失败后,返回值为NULL

2.对动态开辟空间的越界访问

void test()
{
	int* p = (int*)malloc(5 * sizeof(int));
	if (p == NULL)
		printf("");
	else
	{
		int i = 0;
		for (i = 0; i < 10; i++)
			*(p + i) = i;//产生越界访问,程序崩溃
	}
	free(p);
	p = NULL;
}

3.对非动态开辟内存使用free释放

void test()
{
	int a = 10;
	int* p = &a;
	*p = 20;//p此时存在栈区
	free(p);//free函数释放堆区的内存
	p = NULL;
	return 0;
}

4.使用free释放动态开辟内存的一部分

void test()
{
	int* p = (int*)malloc(40);
	if (p == NULL)
		return 0;
	int i = 0;
	for (i = 0; i < 10; i++)
		*p++ = i;
	free(p);//此时p指向的地址已发生改变
	p = NULL;
	return 0;
}

5.对同一块动态开辟内存进行多次释放

void test()
{
	int* p = (int*)malloc(40);
	if (p == NULL)
		return 0;
	free(p);
	//....
	//....
	free(p);
	return 0;
}

6.动态开辟内存忘记释放(内存泄漏)

注:使用完后一定要进行内存释放


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进