C,void返回函数中的错误处理
发布时间:2020-12-16 09:49:18 所属栏目:百科 来源:网络整理
导读:给出这个例子的功能: 并且我只能更改函数中的else语句,我应该如何处理内存分配错误?我不能返回一些错误代码,因为函数返回void,我不能在C中抛出异常,我不能只是在一个函数中停止执行一个错误,这可能是相对于程序的其他东西而言是次要的做…我应该让指针为NU
给出这个例子的功能:
并且我只能更改函数中的else语句,我应该如何处理内存分配错误?我不能返回一些错误代码,因为函数返回void,我不能在C中抛出异常,我不能只是在一个函数中停止执行一个错误,这可能是相对于程序的其他东西而言是次要的做…我应该让指针为NULL并让调用我的函数后使用我的函数的编码器处理错误? 我可以使用的唯一函数是这些库中的函数:stdio.h,stdlib.h,string.h,stdarg.h 谢谢! 解决方法
可能是. 但不仅是“之后”而且之前,编码器需要存储传递给你的函数指针的地址的副本.因为如果编码器没有和你的功能失败程序泄露内存,namly这样的指向地址引用. char * p = malloc(42); { char * p_save = p; f(&p_save,""); if (NULL == p_save) { /* log error or what ever is needed,including freeing p and return,exit or abort */ } else { p = p_save; } } free(p); 或者只是将生病的函数包装成更容易处理的东西: int fex(char ** pp,const char * t) { char * p = *pp; /* Store a backup,just in case. */ f(pp,t); if (NULL == *pp) { *pp = p; /* Opps,restore ... */ return -1; /* ... and indicate error. errno should already have been set by realloc in f. */ } return 0; /* Good. */ } 或者(有点脏): char * fex(char * p,const char * t) { f(&p,t); if (NULL == p) { return (char *) -1; /* ... and indicate error. errno should already have been set by realloc in f. */ } return p; /* Good. */ } 称后者为: char * p = malloc(42); { char * tmp = fex(p,""); if ((char *) -1) == tmp) { perror("fex() failed"); } else { p = tmp; } } free(p); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |