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. 指针的数组需要给指针也赋予空间,说到底还是对指针不够了解