Действительно ли эта инициализация указателя необходима?

Позволяет говорят, что у меня есть следующее:

 CHARLINK * _init_link(CHARLINK **link)
 {
    short i;
    (*link)->cl = (CHARLINK **) calloc(NUM_CHARS, sizeof(CHARLINK *));
    for (i = 0; i < NUM_CHARS; i++)
        (*link)->cl[i] = NULL;
    return (*link);
}

Цикл должен инициализировать каждый элемент для ОБНУЛЕНИЯ необходимый, или они являются автоматически ПУСТЫМИ от calloc?

6
задан user318747 14 May 2010 в 20:21
поделиться

3 ответа

Да, присвоение NULL в цикле необходимо. calloc инициализируется всеми битами 0. Но нулевой указатель может быть представлен не так. Это зависит от реализации. Поэтому необходимо присваивание.

13
ответ дан 8 December 2019 в 05:20
поделиться

Нет, calloc инициализирует свои буферы в 0.

3
ответ дан 8 December 2019 в 05:20
поделиться

Это немного зависит от вашей системы, но в подавляющем большинстве случаев это нормально. calloc () возвращает буфер, заполненный нулями. Однако нулевой указатель на вашем компьютере может не быть битовой комбинацией 0. На машине, где нулевой указатель не равен нулю, вы можете столкнуться с проблемами.

7
ответ дан 8 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: