【问题标题】:Memory leaks checked in valgrind在 valgrind 中检查内存泄漏
【发布时间】:2013-01-26 10:30:29
【问题描述】:

我的老师说我的程序有内存泄漏,所以我使用 valgrind 来检查它。我收到以下错误:

==24060== Invalid read of size 8
==24060==    at 0x4EB4B4C: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E253: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dc040 is 0 bytes inside a block of size 5 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4E63D43: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E23D: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB4B54: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E253: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dc048 is 3 bytes after a block of size 5 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4E63D43: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E23D: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB4931: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E266: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dc040 is 0 bytes inside a block of size 5 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4E63D43: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E23D: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Conditional jump or move depends on uninitialised value(s)
==24060==    at 0x4EB493F: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5DF87: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Conditional jump or move depends on uninitialised value(s)
==24060==    at 0x4E5DF8D: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Conditional jump or move depends on uninitialised value(s)
==24060==    at 0x4E5DFAF: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Use of uninitialised value of size 8
==24060==    at 0x4E5E033: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Use of uninitialised value of size 8
==24060==    at 0x4E5E041: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Conditional jump or move depends on uninitialised value(s)
==24060==    at 0x4E5E047: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Conditional jump or move depends on uninitialised value(s)
==24060==    at 0x4EB2E42: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E06C: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Use of uninitialised value of size 8
==24060==    at 0x4EB4214: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E06C: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Use of uninitialised value of size 8
==24060==    at 0x4EB4218: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E06C: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB2E1E: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CECD: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dc158 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E129: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB4931: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4EB4585: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CEE4: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dc158 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E129: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB2E23: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5DEFA: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dc158 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5E129: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D328: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CE85: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB4931: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5C9D2: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D0B2: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dd568 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CEE4: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB2E1E: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CA0F: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D0B2: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dd518 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CEE4: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB2E23: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CA0F: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D0B2: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dd568 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CEE4: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB2E1E: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CA83: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D0B2: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dd568 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CEE4: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 
==24060== Invalid read of size 8
==24060==    at 0x4EB2E1E: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CA9D: ??? (in /lib64/libc-2.16.so)
==24060==    by 0x4E5D0B2: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060==  Address 0x51dd568 is 8 bytes inside a block of size 12 alloc'd
==24060==    at 0x4C2AD7B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24060==    by 0x4EB4591: strdup (in /lib64/libc-2.16.so)
==24060==    by 0x4E5CEE4: setlocale (in /lib64/libc-2.16.so)
==24060==    by 0x401751: ??? (in /usr/bin/test)
==24060==    by 0x4E52804: (below main) (in /lib64/libc-2.16.so)
==24060== 

谁能帮我理解这个错误是什么意思?

【问题讨论】:

  • 我发现实际上没有内存泄漏,但是我想摆脱这些其他错误。
  • 我用 -g 标志编译,但没有帮助。也许问题是我在项目中有一个头文件?
  • 如果您还没有,请尝试使用 -Wall 编译程序以突出显示所有警告,并使用 -Werror 将警告视为错误。如果出现任何问题,请修复它们,无论它们多么微不足道。每当您使用 C 进行编码时,我都会推荐这种做法。

标签: memory valgrind memory-leaks


【解决方案1】:

为什么 valgrind 输出不显示行号?我不知道在哪里寻找这个错误。 我用标志 -g 编译了我的程序,并使用以下语法使用 valgrind: valgrind --tool=memcheck --track-origins=yes -q test

【讨论】:

  • 您是否创建了一个新帐户以便回答您自己的问题?
  • 这是一个错误,对不起。 :)
猜你喜欢
  • 2016-08-08
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2020-03-31
  • 2016-03-15
  • 2014-04-09
相关资源
最近更新 更多