Доброго дня.
Столкнулся с непонятной для меня ситуацией.
Есть статический массив указателей в структуре, которая создаётся динамически:
typedef struct {
void * buf[100];
...
} QueueSteps ;
QueueSteps * m = (QueueSteps *) malloc(sizeof(QueueSteps));
if (m==null) { errorHandler(); }
Сами элементы массива то же создаются динамически по аналогичному принципу и помещаются в массив.
Иногда случается такое, что один из указателей в таком массиве получается равным чему угодно, но только не валидному указателю. Я думал из-за фрагментации памяти, но errorHandler(); не вызывается в таких случаях (при дебаге), т.е. все объекты всегда создаются успешно.
Хотел бы уточнить два вопроса:
1. Обрабатывает ли malloc все возможные ошибки распределения памяти (какие именно? Что не учитывает?) и возвращает null при этом?
2. Правильно ли я понимаю, что так как массив объявлен статически, то да же с учётом того, что он в структуре и память выделяется динамически, то он всегда будет "линейным" а не разбросанным по частям (то есть нормально будет работать адресная арифметика *(a+9) и т.д.)
3. Если всё так, то стоит искать другие возможные проблемы?
P.S. про освобождение памяти не забыто.