5
保持printf
和scanf
语句的可达内存泄漏。我需要没有泄漏。当我运行报告时,它说我在打印语句和扫描语句中得到了可达性泄漏。我的问题是如何修复泄漏?Valgrind内存泄漏可达
这里是Valgrind的报告:
kidslove-的MacBook:SRC kidslove $的valgrind --leak检查=全 - 显示,泄漏种=所有./a.out
==6405== Memcheck, a memory error detector
==6405== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==6405== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info
==6405== Command: ./a.out
==6405==
Enter File Name: input2.txt
1. Print the array sorted by street.
2. Print the array sorted by city.
3. Print the array sorted by state then city
4. Print the array sorrted by zip.
5. Quit
--> 5
==6405==
==6405== HEAP SUMMARY:
==6405== in use at exit: 42,554 bytes in 422 blocks
==6405== total heap usage: 513 allocs, 91 frees, 53,707 bytes allocated
==6405==
==6405== 4,096 bytes in 1 blocks are still reachable in loss record 77 of 78
==6405== at 0x1000076C1: malloc (vg_replace_malloc.c:303)
==6405== by 0x1001F1836: __smakebuf (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x100206387: __swsetup (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x10022075D: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x100220C80: __xvprintf (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1001F6B71: vfprintf_l (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1001F49D7: printf (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1000010B3: openFile (hw5.c:15)
==6405== by 0x100001CD5: main (cscd240hw5.c:9)
==6405==
==6405== 4,096 bytes in 1 blocks are still reachable in loss record 78 of 78
==6405== at 0x1000076C1: malloc (vg_replace_malloc.c:303)
==6405== by 0x1001F1836: __smakebuf (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1001F4E99: __srefill0 (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1001F4F94: __srefill (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1001FC00D: __svfscanf_l (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1001F515D: scanf (in /usr/lib/system/libsystem_c.dylib)
==6405== by 0x1000010C8: openFile (hw5.c:16)
==6405== by 0x100001CD5: main (cscd240hw5.c:9)
==6405==
==6405== LEAK SUMMARY:
==6405== definitely lost: 0 bytes in 0 blocks
==6405== indirectly lost: 0 bytes in 0 blocks
==6405== possibly lost: 0 bytes in 0 blocks
==6405== still reachable: 8,192 bytes in 2 blocks
==6405== suppressed: 34,362 bytes in 420 blocks
==6405==
==6405== For counts of detected and suppressed errors, rerun with: -v
==6405== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 15)
部分我的程序是返回泄漏:
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();
'fopen' without'fclose' –
来电者将关闭它。 –
@Ôrel:报告指向printf/scant。其中一个人会希望fclose在其他地方...... –