大家帮忙看看,c语言动态内存分配的问题

lirongwei 发布于 2012/07/23 23:31
阅读 415
收藏 2
typedef struct _VECTEX
{
	int start;
	int number;
	LINE *neighbor;
	struct _VECTEX* next;
}VECTEX;


VECTEX* create_new_vectex( int start )
{
	VECTEX* pVector = (VECTEX *)malloc( sizeof( struct _VECTEX));
	if( NULL == pVector ) exit(-1);//这个地方大伙儿怎么处理的,我用exit(-1),但是觉得不大好。如果内存没有正常获得,要是遇到问题就直接终止了。
	pVector->start = start;
	pVector->next = NULL;
	pVector->neighbor = NULL;
}


加载中
1
l
leyaya.cn
呵,我这是个反问,让你思考什么是函数,函数应该只负责自己的本职工作,exit这种事明显不是函数的本职工作,所以要摘出来,在外层处理业务逻辑的主流程上再exit.
l
leyaya.cn
呵呵,11年了
lirongwei
lirongwei
感谢。我好像了解了函数的作用了,函数就是实现一个功能,实现不了,就返回一个值,然后外部再判断返回值的合法性进行处理。可以弱弱的问一下楼上的吗?您工作几年了?
0
l
leyaya.cn
晕,你是在函数内呀,直接return NULL;不就行了吗?
0
小耶果
小耶果

我个人的建议如果pVector出错了,那基本可以确定内存或者硬盘有地方损坏.所以不要做防错处理.
做为强迫症 int a=1+1;if(a!=2){...;/*如果执行到这里,基本断定是CPU损坏不是吗.*/}

0
l
leyaya.cn
在编码中内存分配不出很常见,函数的作用是什么?为什么要在函数内退出程序呢,退出程序这种事还是交给主程序进行,判断一下函数返回值,输出一个友好的错误提示,然后再退出。
lirongwei
lirongwei
函数的功能是新建一个图的节点。
0
中山野鬼
中山野鬼

哈。。。。C的问题我爱回答。。。

这里我说两个观点:

1、@leyaya.cn 大部分观点我是认同的,我同时要补充的是,在malloc这种分配或和OS打交道的函数,应该包装一下,对于出现异常,按照异常等级来划分,决策是否要退出。例如不是自身代码运行环境的空间申请,而是新任务的追加,没必要进程退掉,无非拒绝服务。

2、内存分配不出,不管是小概率还是大概率,只要是和OS对接的,就应该有错误或异常处理函数。无非手段好,还是坏的问题。

系统设计,边界感很重要。边界越明确,在该系统切换到其他环境下,或者调整和环境的接口时,对内部的逻辑影响就越小,测试也容易(SIMU),改动维护也越方便。

0
yandong
yandong
现在的malloc的功能已经很强悍了,自己会解决一些问题,如果说malloc没有分配成功,说明资源已经耗尽,或者系统错误,malloc会自己给出错误提示等。 但是即便自己要强制推出,也要放在主函数里面
0
拉菲一箱
拉菲一箱

你想让它干嘛就干嘛,你要在这里直接退出,也行,就是体验不好而已。

 

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部