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

Posted

技术标签:

【中文标题】Valgrind 消息:系统调用 close() 中的文件描述符 1024 无效【英文标题】:Valgrind messages : invalid file descriptor 1024 in syscall close() 【发布时间】:2014-03-09 22:02:10 【问题描述】:

我在使用 valgrind 测试我的 bin 时收到此消息:

==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);

哪里/什么问题?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:
 if (list_add_elem_at_back(&data->list, s) == FALSE)
    
      fprintf(stderr,"Cannot stock\n");
      return (-1);
    

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

【讨论】:

是的,你是对的,谢谢。但这并不能解决我的问题。

以上是关于Valgrind 消息:系统调用 close() 中的文件描述符 1024 无效的主要内容,如果未能解决你的问题,请参考以下文章

如何理解我的 valgrind 错误消息?

valgrind 打印程序调用树+进行多线程性能分析

Python 服务器 - 处理 WebSocket.close()

套接字之close系统调用

valgrind 使用入门

close()和shutdown()函数