【问题标题】:arrays of type structstruct 类型的数组
【发布时间】:2013-11-14 16:11:37
【问题描述】:

0我已经声明了一个结构如下:

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

    typedef struct node NODE;

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

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

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

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

【问题讨论】:

    标签: c arrays gcc struct


    【解决方案1】:

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

    NODE* array[312500];
    

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

    如果你只想NODEs,那么说

    NODE array[312500];
    

    否则,你需要说类似

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

    然后你可以改变它的ptr

    【讨论】:

    • array[0] = (NODE*) malloc(sizeof(NODE));数组[0]->ptr=first;这是这样做的权利吗???
    • @TIMTAYLOR:是的,听起来不错。请记住,如果要使用数组的每个元素,您需要为它们分配内存,而不仅仅是第一个元素。还请记住,您应该在完成后使用free 清理该内存。
    【解决方案2】:

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

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

    或者至少到array[0]通过相同的语法使用array[0]-&gt;ptr

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多