在C中,如何将结构中指针数组中的所有元素初始化为null?

时间:2014-02-02 04:49:17

标签: c arrays pointers initialization

我在C上相当新,我想知道如何将指针数组中的所有元素设置为null。 我创建了一个包含指向指针数组的指针的结构,我想将所有这些指针设置为null。

这是结构:

typedef struct
{
    char **array;
    int size, capacity;
} ArrayList;

这里我尝试创建一个指针数组并将它们初始化为null:

ArrayList *createArrayList(int length)
{
    int i;
    ArrayList* strArray = malloc(sizeof(ArrayList));
    for(i=1; i<length; i++)
    {
    strArray->array[i] = NULL;
    }
return strArray;
}

不幸的是,这会产生分段错误。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

strArray->array[i] = NULL;

由于您没有为array分配内存,因此无法执行此操作。您需要将其分配为

strArray->array = malloc(sizeof(char *) * length);

然后将所有元素初始化为NULL

您还可以使用calloc将内存设置为0,在这种情况下,您不需要for循环。

strArray->array = calloc(length, sizeof(char *));

答案 1 :(得分:1)

首先,

ArrayList* strArray = malloc(sizeof(ArrayList));

仅为strArray实例本身分配空间;它不会为您的array成员分配任何内容。您必须单独分配该内存:

strArray->array = calloc( length, sizeof *strArray->array );

calloc将零初始化数组的所有元素。

答案 2 :(得分:0)

您必须为指针数组和结构分配内存。你应该从0开始循环,因为C数组是从0开始的。

ArrayList *createArrayList(int length)
{
    int i;
    ArrayList* strArray = malloc(sizeof(ArrayList));
    strArray->array = malloc(length * sizeof(char *));
    for (i = 0; i < length; i++)
    {
        strArray->array[i] = NULL;
    }
    return strArray;
}

答案 3 :(得分:0)

它们已经为空。您正在获取seg错误,因为您无法分配尚未分配的变量。从行

strArray-&gt; array [i] = NULL;