首页 > 系统相关 >常见的动态内存开辟错误

常见的动态内存开辟错误

时间:2024-01-07 21:32:08浏览次数:33  
标签:malloc main return 错误 int free 动态内存 NULL 开辟

1.没有判断malloc返回值是否开辟成功,对NULL解引用操作
int main()
{
	int* p = (int*)malloc(40);//没有判断malloc开辟失败情况
	//万一malloc失败,p就被赋值为NULL
	for (int i = 0; i < 10; i++)
	{
		*(p + i) = i;
	}
	free(p);
	p = NULL;
	return 0;
}
2.对动态开辟内存的越界访问
int main()
{
	int* p =(int *) malloc(5*sizeof(int));//20个字节
	if (p == NULL)
	{
		return 0;
	}
	else
	{
		int i = 0;
		for (i = 0; i < 10; i++)//此时访问的字节已经越过malloc开辟的空间大小
		{
			*(p + i) = i;
		}
	}
	free(p);
	p = NULL;
	return 0;
}
3.对非动态(堆区之外的)开辟的内存使用free
int main()
{
	int a = 10;//栈区开辟的空间
	int* p = &a;
	*p = 20;

	free(p);
	p = NULL;
	return 0;
}
4.使用free释放动态开辟内存的一部分
int main()
{
	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先开始的起始位置进行释放
	p = NULL;
	return 0;
}
5.对同一块内存进行多次释放
int main()
{
	int* p = (int*)malloc(40);
	if (p == NULL)
	{
		return 0;
	}
	free(p);
	//可以p=NULL;避免多次释放
	free(p);
	return 0;
}
6.对动态开辟内存的忘记释放--导致内存泄露
int main()
{
	while (1)
	{
		malloc(1);//一直开辟不回收
	}
	return 0;
}

标签:malloc,main,return,错误,int,free,动态内存,NULL,开辟
From: https://blog.51cto.com/u_16425777/9135047

相关文章

  • 动态内存管理:malloc free——《初学C语言第50天》
    //////——————1.动态内存管理(内存空间)////共四个函数:malloc free calloc realloc////1.为什么存在动态内存分配////我们已经掌握的内存开辟方式有:////intval=20;//在栈空间上开辟四个字节////chararr[10]={0};//在栈空间上开辟10个字节的连续空间////......
  • 铺先生:店铺选址不能犯的错误有哪些?这几点都不能犯
    店铺选址不能犯的错误有哪些?我们都知道店铺选址关乎着经营成败,在这件事上一点略微的失误都会导致选址错误。下面小编就来跟大家说说都有什么错误不能犯吧。1. 流量少的地方不能选店铺选址不能犯的第一个错误就是人流量少的地方不能选!一个店铺的正常经营必然是少不了客人的,而客人的......
  • 50X 错误
    50X错误如何解决?面对502BadGateway和504GatewayTimeout这两种服务器错误,我们通常需要根据具体的错误类型、错误发生场景以及系统架构来判断问题所在,并采取相应的解决策略。以下是一些常见的排查与解决步骤:对于502BadGateway:检查后端服务:确认后端服务器是否正在运行......
  • pytorch反向传播错误解决:RuntimeError: Trying to backward through the graph a seco
    pytorch反向传播错误解决:错误:RuntimeError:Tryingtobackwardthroughthegraphasecondtime,butthebuffershavealreadybeenfreed.Specifyretain_graph=Truewhencallingbackwardthefirsttime.归因排查:出现这种错误有可能是反向传播过程中出现了二次传播,......
  • 服务器50X错误如何解决?
    50X错误如何解决?面对502BadGateway和504GatewayTimeout这两种服务器错误,我们通常需要根据具体的错误类型、错误发生场景以及系统架构来判断问题所在,并采取相应的解决策略。以下是一些常见的排查与解决步骤:对于502BadGateway:检查后端服务:确认后端服务器是否正在运行且可用,是否......
  • 【JDK+jenkins+gitee实现CI/CD(之三)】 jenkins拉取gitee代码WebHook返回403或404错误
     先上几张让我纠结了很多天的截图  以上是在我配置好jenkins和gitee令牌后一直出现的错误,查询了很多天资料后,确认造成的主要原因就是权限问题我的Jenkins 是最新的版本2.426.2,说下以下我使用过但无效果的办法,这些方法不能解决我提交代码后Jenkins触发WebHook的403问题......
  • Python 开发中有哪些常见的编程错误需要注意
    在Python开发中,常常会遇到各种编程错误。这些错误可能导致程序崩溃、产生错误的输出或者不符合预期的行为。为了提高代码质量和减少错误,以下是一些常见的编程错误和注意事项:1.语法错误语法错误是最常见的编程错误之一,它通常是由于拼写错误、缺少冒号、括号不匹配等导致的。为了避免......
  • Vue 周报 #126 - 在Nuxt中处理客户端错误
    Hi......
  • dell R730服务器报MEM0001错误
    dellR730服务器报MEM0001错误发布时间:2022-03-23点击数:1223dellR730服务器报MEM0001Multi-bitmemoryerroronDimm-B2.ReseatMemory错误解决方案:这个提示是报位于B2槽位的内存条发生多位错误,可以断电后把内存用橡皮清洁金手指再插上,再试,如果还是报这个,是内存挂了。可以先......
  • 【错误记录】set 集合容器仿函数报错 ( 具有类型“const IntCompare”的表达式会丢失
    文章目录一、报错信息二、问题分析三、解决方案一、报错信息使用仿函数为set集合容器定义元素排序规则;仿函数functor是一个在许多编程语言中都存在的概念,它通常指一个对象,该对象能像函数那样被调用;具体来说,仿函数是一个类,该类重载了operator()函数,......