我在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;
}
不幸的是,这会产生分段错误。任何帮助将不胜感激。
答案 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;