C语言创建指针的数组

背景:

  在学习基数排序的时候,需要对多个关键字进行分类然后再收集。在进行对每位数字排序的时候,对于在一位上数字相同的数字分为一类,即用一个链表存储,使用尾插法(一定要使用尾插法,保证有序)。因此需要创建一个数组大小为10,每个元素为一个链表的数组

代码:

typedef struct LinkedNode
{
    int value;
    struct LinkedNode* next;
}LNode, *List;
List* bucketlist = (List*)malloc(sizeof(List) * 10);//这是基数组,用来储存保存相同关键字的值

问题:

出现段错误,访问了不该访问的地方。

解决:

自己折腾了一会,解决 不了就找JAVA群的大佬寻求帮助,竹佬一针见血地指出了问题:

对于bucketlist数组,我们只是给了每个元素赋予指针的空间,但是还没有给指针的结点赋予空间,所以无法向指针中存入数据。

 for(int i = 0;i<10;i++){
        bucketlist[i] = (List)malloc(sizeof(LNode));
    }
    for(int i = 0;i < 10;i++)
    {
        bucketlist[i]->next = NULL;//初始化基数组
    }

加入这几行代码后,成功解决。

总结:

1. malloc函数中给出的内存大小是这个数组所需要的大小,即里面元素的总体大小,如果是List就是LNode * n

2. 指针的数组需要给指针也赋予空间,说到底还是对指针不够了解

posted @ 2020-12-03 11:18  重言  阅读(626)  评论(0)    收藏  举报