#c #calloc
#c #calloc
Вопрос:
Я получаю какое-то столкновение указателей,
В принципе, в одной функции я делаю,
a = calloc(1,28); // gives me 0x100100d10
Затем довольно скоро в подфункции, которую я делаю,
b = calloc(1,16); // gives me 0x100100d20;
первый адрес 28 равен 0x0 ..d2C, т.Е. распространяется на указатель, указанный во втором calloc…
Что здесь происходит?
Значения указателя взяты из printf, а не gdb.
Комментарии:
1. Можете ли вы свести это к минимальному , компилируемому фрагменту кода?
2. Крайне маловероятно, что с calloc что-то не так, поэтому вам, вероятно, нужно показать еще немного кода.
3. Как именно вы печатаете значения указателя? Эти адреса кажутся мне подозрительными (и совершенно невозможными, если вы работаете в 32-разрядной системе).
Ответ №1:
Если это действительно происходит, как вы описываете, то вы повредили кучу, записав за пределы выделенного блока (или, возможно, даже используя неинициализированный указатель или указатель на уже освобожденную память), таким образом, вызывая неопределенное поведение. Инструмент valgrind, вероятно, может помочь вам отследить проблему, или, если ваша программа не слишком большая, вы можете просто вручную выполнить поиск недопустимого использования указателя.