加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C,void返回函数中的错误处理

发布时间:2020-12-16 09:49:18 所属栏目:百科 来源:网络整理
导读:给出这个例子的功能: 并且我只能更改函数中的else语句,我应该如何处理内存分配错误?我不能返回一些错误代码,因为函数返回void,我不能在C中抛出异常,我不能只是在一个函数中停止执行一个错误,这可能是相对于程序的其他东西而言是次要的做…我应该让指针为NU
给出这个例子的功能:

并且我只能更改函数中的else语句,我应该如何处理内存分配错误?我不能返回一些错误代码,因为函数返回void,我不能在C中抛出异常,我不能只是在一个函数中停止执行一个错误,这可能是相对于程序的其他东西而言是次要的做…我应该让指针为NULL并让调用我的函数后使用我的函数的编码器处理错误?

我可以使用的唯一函数是这些库中的函数:stdio.h,stdlib.h,string.h,stdarg.h

谢谢!

解决方法

should I just let the pointer be NULL and let the coder that is using my function to handle the errors after calling my function?

可能是.

但不仅是“之后”而且之前,编码器需要存储传递给你的函数指针的地址的副本.因为如果编码器没有和你的功能失败程序泄露内存,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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读