0

プロジェクトからの valgrind 出力は次のとおりです。

==2433== Invalid free() / delete / delete[] / realloc()
==2433==    at 0x402B06C: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2433==    by 0x43F345B: av_freep (mem.c:172)
==2433==    by 0x5A6F4D2: (below main) (libc-start.c:226)
==2433==  Address 0xb3fd830 is 48 bytes inside a block of size 111,634 alloc'd
==2433==    at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2433==    by 0x80BB6B5: _talloc_realloc (talloc.c:997)

で始まる行Addressは、 で始まる行よりも 1 スペース多くインデントされInvalidます。それは、ある人が別の人につながるということですか?それとも別々ですか?

別々の場合、by 0x5A6F4D2: (below main) (libc-start.c:226)どこから来たのですか? 何か関係があるような気(below main)がしますが、ハード ドライブのどこにも libc-start.c が見つかりません。

4

2 に答える 2

2

Yes, it is providing you with additional details on the invalid free. The first four lines describe the invalid call (free in this case) and the call stack at the time of the free. The following three lines provide additional data. In this case, valgrind recognizes that the address passed to free is contained within an allocated region, and it provides the offset, size of the block, and call stack of that allocation.

于 2012-06-15T16:50:05.597 に答える
1

valgrind.orgによると、以下に示すように、階層はフラットである必要があります。

==3016== Invalid write of size 1
==3016==    at 0x80484DA: main (in /jfs/article/sample2)
==3016==    by 0x40271507: __libc_start_main (../sysdeps/generic/libc-start.c:129)
==3016==    by 0x80483B1: free@@GLIBC_2.0 (in /jfs/article/sample2)
==3016==    Address 0x40CA0224 is 0 bytes after a block of size 512 alloc'd
==3016==    at 0x400483E4: malloc (vg_clientfuncs.c:100)
==3016==    by 0x80484AA: main (in /jfs/article/sample2)
==3016==    by 0x40271507: __libc_start_main (../sysdeps/generic/libc-start.c:129)
==3016==    by 0x80483B1: free@@GLIBC_2.0 (in /jfs/article/sample2)

Address出力を読みやすくするためのバージョン固有の変更である可能性があるため、出力のインデントを上記のように扱います。

于 2012-06-15T16:49:44.287 に答える