malloc 返回 0x100000000

Baj*_*aju 5 c malloc pointers

我有一个奇怪的问题malloc。在使用多个 malloc 分配 <10mb 后,malloc 突然返回地址0x100000000,这会在访问时导致 SIGSEGV。我不知道出了什么问题。设置errno0并且我的内存有足够的空间,所以这不应该是空间问题。malloc 返回的最后地址小于0x6255f0。知道要寻找什么吗?

有关我的系统的一些信息:

  • gcc 版本 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
  • 标志:-墙
  • uname: 2.6.35-27-generic #48-Ubuntu SMP 2 月 22 日星期二 20:25:46 UTC 2011 x86_64 GNU/Linux

PMAP 输出:

Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000       0      32       0 r-x--  tests
000000000060a000       0       4       4 r----  tests
000000000060b000       0       4       4 rw---  tests
000000000060c000       0     116     116 rw---    [ anon ]
00007ffff75cd000       0     348       0 r-x--  libc-2.12.1.so
00007ffff7747000       0       0       0 -----  libc-2.12.1.so
00007ffff7946000       0      16      16 r----  libc-2.12.1.so
00007ffff794a000       0       4       4 rw---  libc-2.12.1.so
00007ffff794b000       0      12      12 rw---    [ anon ]
00007ffff7950000       0      32       0 r-x--  libm-2.12.1.so
00007ffff79d2000       0       0       0 -----  libm-2.12.1.so
00007ffff7bd1000       0       4       4 r----  libm-2.12.1.so
00007ffff7bd2000       0       4       4 rw---  libm-2.12.1.so
00007ffff7bd3000       0      28       0 r-x--  liblinopt.so
00007ffff7bdb000       0       0       0 -----  liblinopt.so
00007ffff7dda000       0       4       4 r----  liblinopt.so
00007ffff7ddb000       0       4       4 rw---  liblinopt.so
00007ffff7ddc000       0     108       4 r-x--  ld-2.12.1.so
00007ffff7f6c000       0     432     432 rw---    [ anon ]
00007ffff7ff8000       0      12      12 rw---    [ anon ]
00007ffff7ffb000       0       4       0 r-x--    [ anon ]
00007ffff7ffc000       0       4       4 r----  ld-2.12.1.so
00007ffff7ffd000       0       4       4 rw---  ld-2.12.1.so
00007ffff7ffe000       0       4       4 rw---    [ anon ]
00007ffffffde000       0      16      16 rw---    [ stack ]
ffffffffff600000       0       0       0 r-x--    [ anon ]
----------------  ------  ------  ------
total kB            9160    1196     648

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7bd8e67 in bound_knapsack (sizes=0x610b30, profits=0x610ad0, B=103, 
    limit=2) at /home/x/Development/binpacking/src/lib/knapsack.c:123
Run Code Online (Sandbox Code Playgroud)

更新

运行 valgrind 揭示了问题:它是之前几行的 calloc: calloc( n, sizeof(unsigned int)); 本来应该是: calloc( n, sizeof(unsigned int*)); 这导致分配的块太小,该块用于存储 malloc 的结果。

谢谢你的橡皮鸭!

bta*_*bta 4

尝试将以下行添加到您的程序中:

#define MALLOC_CHECK_ 3
Run Code Online (Sandbox Code Playgroud)

malloc这应该会导致使用不同的版本,该版本可以检测某些错误并将其报告给您。有关更多详细信息,请参阅malloc 手册页的“注释”部分。