Нужна ли инициализация указателя? - PullRequest
6 голосов
/ 15 мая 2010

Допустим, у меня есть следующее:

 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);
}

Необходим ли цикл для инициализации каждого элемента в NULL или они автоматически равны NULL из calloc?

Ответы [ 3 ]

13 голосов
/ 15 мая 2010

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

7 голосов
/ 15 мая 2010

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

3 голосов
/ 15 мая 2010

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

...