Цитата(DenF1 @ May 4 2007, 14:23)

Здравствуйте!
Странное поведение функции malloc обнаружилось. Иногда она возвращает указатель на уже выделенную область, хотя область эту является занятой. Складывается впечатление, что рушится системная информация о цепочке выделенных блоков, в результате ошибочной записи по кривому указателю. Где сидит инфа о выделенных блоках? Кто-нить сталкивался с чем-то подобным?
Это врядли. Но по своему проекту заметил одну интересную особенность хотя и понятную (интересную для человека). IAR сегменты располагает как придётся. Человек обычно под кучу край озу выделяет, а компилятор в середине озу. Таким образом если совершенно другой ваш сегмент (например стек) вылазит за отведённые (вами же) пределы, то компилятор об этом знать не будет (не статическое распределение памяти а динамическое её потребление. Тем же стеком к примеру). Вот и получится что malloc выделяет занятую память (согласно рамкам установленным компилятором под сегмент она свободна.)
Для того чтобы избежать такой ошибки я чётко определяю реальные размеры стека и прибавляю запас. После чего распределяю оставшуюся кучу.