这个指针初始化是否必要?

use*_*747 6 c malloc initialization

可以说我有以下内容:

 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);
}
Run Code Online (Sandbox Code Playgroud)

循环是将每个元素初始化为NULL还是从calloc自动为NULL?

Hei*_*sis 13

是的,在循环中赋值为NULL是必要的.calloc初始化为所有位0.但是空指针可能不会像那样表示.它取决于实现.因此,分配是必要的.


Car*_*rum 7

这取决于您的系统,但在绝大多数情况下,它是可以的. calloc()返回一个填充零的缓冲区.但是,计算机上的空指针可能不是0的位模式.在空指针不为零的机器上,您可能最终遇到麻烦.

  • 依靠通常有效但无法保证工作的行为是一个坏主意.即使你从未遇到过它,离开循环并将`calloc()`更改为`malloc()`也不容易,因此没有人会想要取出循环并破坏代码在这些异国情调的平台之一? (2认同)