Valgrind 消息:系统调用 close() 中的文件描述符 1024 无效

问题描述 投票:0回答:2

我在使用 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);
}

问题出在哪里/什么?

c profiling valgrind
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()
而不关闭文件。


1
投票

使用

ulimit -n
,它会显示最大打开文件数,我猜你在某些代码中没有关闭 fd 。请跟踪您的代码,以了解每个
fopen
socket
select
必须有
close

© www.soinside.com 2019 - 2024. All rights reserved.