1

0i 声明了一个结构如下:

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

    typedef struct node NODE;

我有一个链接列表,其中有一个名为 first 的指针指向它。

而且我还声明了上述类型节点的数组NODE* array[312500];

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

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

4

2 回答 2

4

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

NODE* array[312500];

是一个包含 312500 个 NODE* 类型指针的数组

如果你只想要NODEs,那么说

NODE array[312500];

否则,您将需要说类似

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

然后你可以改变它ptr

于 2013-11-14T16:13:05.217 回答
2

您忘记为数组分配内存。你只有一个指针数组。所以 array[0]->ptr会出现分段错误。
首先为数组分配内存:

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

或者至少要按array[0]相同的语法来使用array[0]->ptr.

于 2013-11-14T16:20:41.433 回答