Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Valgrind内存泄漏可达_C_Memory Leaks_Valgrind - Fatal编程技术网

C Valgrind内存泄漏可达

C Valgrind内存泄漏可达,c,memory-leaks,valgrind,C,Memory Leaks,Valgrind,不断获取printf和scanf语句的可访问内存泄漏。我需要一点漏洞都没有。当我运行报告时,它说我在打印语句和扫描语句中得到了可触及的泄漏。我的问题是如何修复泄漏 以下是valgrind报告: kidslove MacBook:src kidslove$valgrind——泄漏检查=完整——显示泄漏类型=全部。/a.out 返回泄漏的程序的一部分: FILE *openFile() { char name[20]; FILE *fin; do { printf("Enter

不断获取
printf
scanf
语句的可访问内存泄漏。我需要一点漏洞都没有。当我运行报告时,它说我在打印语句和扫描语句中得到了可触及的泄漏。我的问题是如何修复泄漏

以下是valgrind报告:

kidslove MacBook:src kidslove$valgrind——泄漏检查=完整——显示泄漏类型=全部。/a.out

返回泄漏的程序的一部分:

FILE *openFile() {
  char name[20];
  FILE *fin;

  do {
    printf("Enter File Name: "); //line 15 leak
    scanf("%s", name); // line 16 leak
    fin = fopen(name, "r");
  }while(fin == NULL);
  return fin;

}
最初的要求是:

fin = openFile();

系统上的标准C库似乎不需要释放stdio使用的缓冲区。这没什么好担心的。程序退出时,系统将释放内存


通常,操作系统提供的valgrind包包含抑制文件,这些文件告诉valgrind不要报告大量预期泄漏。要么你正在使用非标准的valgrind软件包,要么你已经禁用了标准抑制功能,要么是在该系统上构建valgrind的任何人都不介意。

fopen
without
fclose
调用者将关闭它。@rel:报告指向printf/scant。我们希望fclose在别处……fclose()在我的主函数中。您可以使用write而不是printf,使用read而不是scanf(尽管后者需要一些工作)
fin = openFile();