Kalombyr
@Kalombyr

В чём может быть причина битого указателя при динамическом выделении памяти?

Доброго дня.
Столкнулся с непонятной для меня ситуацией.
Есть статический массив указателей в структуре, которая создаётся динамически:

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. про освобождение памяти не забыто.
  • Вопрос задан
  • 278 просмотров
Решения вопроса 1
gbg
@gbg
Любые ответы на любые вопросы
На три из двух ваших вопросов ответ - да, в соответствии со стандартом языка. Ищите ошибки в другом месте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы