博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谁分配、谁释放的原则需要goto
阅读量:5859 次
发布时间:2019-06-19

本文共 912 字,大约阅读时间需要 3 分钟。

函数只有一个出口,不允许中间return、break、continue

void Func(void){	char*  p1 = null;	char*  p2 = null;	char*  p3 = null;	p1 = (char*)malloc(10);//p1已经分配,必须释放	if(!p1)  return;	p2 = (char*)malloc(10);	if(!p2)	{		free(p1);		p1 = null;//由于p2分配失败,必须释放p1			return;	}	p3 = (char*)malloc(10);//p3已经分配,必须释放	if(!p3)	{		free(p1);		p1 = null;//由于p2分配失败,必须释放p1和p2		free(p2);		p2 = null;		return;	}		//...		//函数结束时,还要书写释放代码	if(p1)	{		free(p1);		p1 = null;	}	if(p2)	{		free(p2);		p2 = null;	}	if(p3)	{		free(p3);		p3 = null;	}}

换成goto

void Func(void){	char*  p1 = null;	char*  p2 = null;	char*  p3 = null;		p1 = (char*)malloc(10);	 if(!p1)  goto  Func_End_Process;	p2 = (char*)malloc(10);	 if(!p2)  goto  Func_End_Process;	p3 = (char*)malloc(10);	      	 if(!p3)  goto  Func_End_Process;	   Func_End_Process:	if(p1)	{		free(p1);		p1 = null;	}		if(p2)	{		free(p2);		p2 = null;	}	if(p3)	{		free(p3);		p3 = null;	}}

本文摘自《0 bug:C/C++商用工程之道》   肖舸 著

转载地址:http://qaejx.baihongyu.com/

你可能感兴趣的文章
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
【转】TabError:inconsistent use of tabs and spaces
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
python httpstr find_Python string.rfind方法代碼示例
查看>>
php 发布拼多多,拼多多补贴换增长的故事还能讲多久?
查看>>
[na]office 2010 2013卸载工具
查看>>
Dynamic Performance Tables not accessible Automatic Statistics Disabled for this session
查看>>
Linux中使用vim乱码
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>
关于Keytool创建服务器自签名证书
查看>>
GRUB Legacy
查看>>
iOS开发之常用的那些工具类和方法
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
linix下用keepalived搭建高可用myqsl-ha
查看>>
我的友情链接
查看>>
hexo博客解决不蒜子统计无法显示问题
查看>>