Calloc предоставляет указатель, который начинается внутри уже выделенной памяти? - PullRequest
1 голос
/ 12 мая 2011

У меня какое-то столкновение указателей,

По сути, в одной функции, которую я выполняю,

a = calloc(1,28); // gives me 0x100100d10

Тогда довольно скоро в подфункции, которую я делаю,

b = calloc(1,16); // gives me 0x100100d20;

первый адрес + 28 равен 0x0..d2C, т. Е. Простирается над указателем, указанным во втором вызове ...

Что здесь происходит?

Значения указателя взяты из printf, а не из gdb.

1 Ответ

4 голосов
/ 12 мая 2011

Если это действительно так, как вы описываете, то вы повредили кучу, записав за пределы выделенного блока (или, возможно, даже используя неинициализированный указатель или указатель на уже освобожденную память), вызвав тем самым неопределенное поведение.Инструмент valgrind, вероятно, может помочь вам отследить проблему, или, если ваша программа не слишком большая, вы можете просто вручную искать недопустимое использование указателя.

...