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,在代码的一些和平中。请跟踪你的代码每个 fopen
, socket
或 select
必须有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 无效的主要内容,如果未能解决你的问题,请参考以下文章