【发布时间】:2013-05-04 23:02:42
【问题描述】:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
//#include<conio.h>
struct list
{
char *value;
struct list *link;
};
struct list *arr[12];int val;
int hf(char *item)
{
int sum,i=0;
while(item[i]!='\0')
{
sum+=item[i];
i++;
}
return sum%12;
}
void insert(struct list ** arr,char *item,int val)
{
struct list *temp,*r;
r=*arr;
temp=(struct list *)malloc(sizeof(struct list));
strcpy((temp->value),item);
if(strcmp((r->value),NULL))
{
strcpy((r->value),(temp->value));
(r->link)=NULL;
}
else
{
while(r->link!=NULL)
r=r->link;
r->link=temp;
r=r->link;
strcpy((r->value),(temp->value));
r->link=NULL;
}
*arr=r;
}
void main()
{
struct list *li[12];int i=0;
for(i=0;i<12;i++)
{
li[i]=NULL;
}
char *item;int ret;
strcpy(item,"Steve");
ret=hf(item);
insert(&li[ret],item,ret);
strcpy(item,"raj");
ret=hf(item);
insert(&li[ret],item,ret);
strcpy(item,"Notes");
ret=hf(item);
insert(&li[ret],item,ret);
}
上面的程序是实现链表数组,我试图插入字符串 作为价值。当我尝试运行程序时,没有错误,但它告诉分段错误(核心转储) 所以请解释原因
【问题讨论】:
-
请注意,您的 hf() 函数可以返回负值。对哈希值、大小和索引使用无符号类型是一个好习惯。另外:2) main() 应返回 int,3) 不要强制转换 malloc() 的返回值,4) 不要使用太多不需要的
()括号。 5)使用一些空格,尤其是在运算符周围。顺便说一句,您的insert(&li[ret],item,ret);应该检查(ret >= 0 && ret < 12)
标签: c data-structures segmentation-fault malloc singly-linked-list