malloc возвращает 0x100000000 - PullRequest
       0

malloc возвращает 0x100000000

3 голосов
/ 18 марта 2011

У меня странная проблема с malloc.После выделения <10 МБ с количеством malloc, malloc неожиданно возвращает адрес <code>0x100000000, который вызывает SIGSEGV при доступе.Я понятия не имею, что не так.errno установлен на 0, и у меня достаточно места в оперативной памяти, поэтому не должно быть проблем с пространством.Последние адреса, возвращаемые malloc, были меньше 0x6255f0.Любая идея, что искать?

Некоторая информация о моей системе:

  • gcc версии 4.4.5 (Ubuntu / Linaro 4.4.4-14ubuntu5)
  • flags: -Wall
  • uname: 2.6.35-27-generic # 48-Ubuntu SMP Вт 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

ОБНОВЛЕНИЕ

Запуск valgrind выявил проблему: перед вызовом было несколько строк: calloc( n, sizeof(unsigned int));, которые должны были быть: calloc( n, sizeof(unsigned int*));, что привело к слишком маленькому выделенному блоку, которыйиспользуется для хранения результата malloc. вздох

Спасибо за резиновую утку!

Ответы [ 2 ]

4 голосов
/ 19 марта 2011

Попробуйте добавить следующую строку в вашу программу:

#define MALLOC_CHECK_ 3

Это должно привести к использованию другой версии malloc, которая может обнаруживать определенные ошибки и сообщать о них вам.Подробнее см. В разделе «Примечания» справочной страницы malloc 1006 *.

1 голос
/ 19 марта 2011

malloc работал нормально, но результат не был сохранен.(см. Обновление).Спасибо за ваши предложения.

Если вы все еще не хотите видеть код: github / knapsack.c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...