我最近养成了运行所有程序valgrind来检查内存泄漏的习惯,但是大部分结果对我来说都有点神秘.
对于我的最新运行,valgrind -v给了我:
All heap blocks were freed -- no leaks are possible
Run Code Online (Sandbox Code Playgroud)
这意味着我的程序被内存泄漏所覆盖,对吗?
那么这个错误意味着什么?我的程序没有正确读取某些内存块吗?
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 9)
1 errors in context 1 of 1:
Invalid read of size 4
at 0x804885B: findPos (in /home/a.out)
by 0xADD918: start_thread (pthread_create.c:301)
by 0xA26CCD: clone (clone.S:133)
Address 0x4a27108 is 0 bytes after a block of size 40 alloc'd
at 0x4005BDC: malloc (vg_replace_malloc.c:195)
by 0x804892F: readInput (in /home/a.out)
by 0xADD918: start_thread (pthread_create.c:301)
by 0xA26CCD: clone (clone.S:133)
used_suppression: 14 dl-hack3-cond-1
Run Code Online (Sandbox Code Playgroud)
此外,这里所谓的"抑制"错误是什么?
Mar*_*ins 22
这看起来很明显......但值得指出的是,这条"no leaks are possible"消息并不意味着你的程序无法泄漏; 它只是意味着它在测试的配置中没有泄漏.
如果我使用没有命令行参数的valgrind运行以下命令,它会通知我没有泄漏是可能的.但是如果我提供命令行参数,它确实会泄漏.
int main( int argc, char* argv[] )
{
if ( argc > 1 )
malloc( 5 );
printf( "Enter any command line arg to cause a leak\n" );
}
Run Code Online (Sandbox Code Playgroud)
Jen*_*edt 12
-g