Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
struct类型的数组_C_Arrays_Gcc_Struct - Fatal编程技术网

struct类型的数组

struct类型的数组,c,arrays,gcc,struct,C,Arrays,Gcc,Struct,0i已声明结构,如下所示: struct node { int num; struct node *ptr; }; typedef struct node NODE; 我有一个链表,有一个指针叫做first指向它 我还声明了上述类型的数组NODENODE*array[312500] 现在我想让数组[0]指向链表而不是第一个,所以我使用了array[0]->ptr=first 但这种方式给了我一个分段错误!!!可能有什么问题 您声明了指针

0i已声明结构,如下所示:

struct node
    {
        int num;
        struct node *ptr;
    };

    typedef struct node NODE;
我有一个链表,有一个指针叫做first指向它

我还声明了上述类型的数组NODE
NODE*array[312500]

现在我想让数组[0]指向链表而不是第一个,所以我使用了
array[0]->ptr=first


但这种方式给了我一个分段错误!!!可能有什么问题

您声明了指针数组,但从未为任何指针分配内存

NODE* array[312500];
是节点类型的312500个指针的数组*

如果只需要
节点
s,那么说

NODE array[312500];
否则,你需要说

array[0] = (NODE*) malloc(sizeof(NODE));

然后你可以改变它的ptr,你声明了一个指针数组,但是没有为任何指针分配内存

NODE* array[312500];
是节点类型的312500个指针的数组*

如果只需要
节点
s,那么说

NODE array[312500];
否则,你需要说

array[0] = (NODE*) malloc(sizeof(NODE));

然后您可以更改它的
ptr

如果您忘记为阵列分配内存。 您只有一个指针数组。因此
数组[0]->ptr
将给出分段错误。
首先为阵列分配内存:

for(i=0;i<312500;++i)
{
   array[i]=(NODE*) malloc(sizeof(NODE));
}

对于(i=0;iptr

您忘记为阵列分配内存。 您只有一个指针数组。因此
数组[0]->ptr
将给出分段错误。
首先为阵列分配内存:

for(i=0;i<312500;++i)
{
   array[i]=(NODE*) malloc(sizeof(NODE));
}

用于(i=0;iptr
阵列[0]=(节点*)malloc(sizeof(节点));阵列[0]->ptr=first;这样做对吗?@TIMTAYLOR:是的,听起来不错。请记住,如果您想使用数组中的每个元素,您需要为它们分配内存,而不仅仅是第一个元素。还要记住,当您使用完后,您应该使用
free
清理内存。数组[0]=(NODE*)malloc(sizeof(NODE));array[0]->ptr=first;这样做对吗?@TIMTAYLOR:是的,听起来不错。请记住,如果您想使用数组中的每个元素,而不仅仅是第一个元素,您需要为它们分配内存。同时请记住,在使用完后,您应该使用
free
清理内存。