Valgrind 消息:在调用 close() 时,文件描述符 1024 无效。

3

我使用valgrind测试我的二进制文件时收到了以下消息:

==8454== Warning: invalid file descriptor 1024 in syscall close()

我打开一次,我关闭一次。下面的函数使用open()打开文件,获取内容,然后使用close()关闭文件。

int             parse(t_struct *data)
{
  int           fd;
  char          *s;

  if ((fd = open(data->file, O_RDONLY)) == -1)
    {
      fprintf(stderr, "Cannot open\n");
      return (-1);
    }
  while ((s = gnl(fd)) != NULL)
    {
      if (list_add_elem_at_back(&data->list, s) == FALSE)
        {
          fprintf(stderr,"Cannot stock\n");
          return (-1);
        }
    }
  close(fd);
  return (0);
}

有什么问题或困难?

2个回答

1
 if (list_add_elem_at_back(&data->list, s) == FALSE)
    {
      fprintf(stderr,"Cannot stock\n");
      return (-1);
    }

我不知道这是否是您问题的原因,但这是一个错误:如果 list_add_elem_at_back() 失败,则退出 parse() 时没有关闭文件。

是的,你说得对,谢谢。但这并没有解决我的问题。 - Amina

1

使用ulimit -n命令,它会显示您的最大打开文件数,我猜您没有关闭fd,在一些代码片段中。请跟踪每个fopensocketselect都必须有close


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接