【发布时间】:2015-11-07 20:57:22
【问题描述】:
我正在尝试创建一个节点数组,并将 S[] 数组中的值输入到它。但是我一直遇到分段错误。 我的结构如下所示:
typedef struct Node {
int num;
struct Node *next;
}ListNode;
用随机数初始化 S[10] 数组:
printf("list is:");
for(i=0;i<10; i++)
{
RN= (random()+1);
S[i]=RN;
printf("%d ",S[i]);
}
printf("\n");
这是我初始化节点数组的方式:
ListNode *bucket[Radix];
for(j=0; j<Radix; j++)
{
bucket[i]=(ListNode*)malloc(sizeof(ListNode));
bucket[i]->next=NULL;
}
这是我用来从 S[] 读取数组数字到链表数组 bucket[] 中的函数:
for(y=0;y<(sizeof(S)/sizeof(int));y++) // S is size of a normal array
{
digit=bucketNumber(S[y],1);// returns the first digit values
pointer= bucket[digit];
number= S[y];
insert_tail(pointer, number);
}
我的 insert_tail 函数如下所示:
ListNode *insert_tail(ListNode *tail, int data)
// insert and element at tail
{
if (tail==NULL)
{ tail=(ListNode *)malloc(sizeof(ListNode));}
else
{
while(tail->next !=NULL)
tail->next = (ListNode *)malloc(sizeof(ListNode));
tail= tail->next;
}
tail->num= data;
tail->next=NULL;
}
这是 bucketNumber 函数:
int bucketNumber(int num,int digit)
{
int x, y;
y= 10*digit;
x= num%y;
if(digit>=2)
{
num= num%y;
x= num/(y/10);
}
return (x);
}
我认为分段错误的原因是我的函数没有正确创建数组中的链接。我不确定你,可能还有其他问题!
【问题讨论】:
-
在调试器中运行你的程序。
-
为了稍微扩展 kaylum 的观点,使用调试器运行程序通常很简单,这样当出现 seg 错误时,您可以准确地看到它发生在哪一行。鉴于您可能会或可能不会显示所有相关代码(尽管在那里付出了很大的努力),人们可能无法帮助您。如果您需要帮助识别 seg-fault 行,请发表评论并附上您的开发环境详细信息。
-
我正在研究宙斯。另外,我只是在使用调试器,它指出了 insert_tail 函数的错误。我尝试修复它,但它仍然无法正常工作。
-
我不熟悉那个 IDE。乍一看,他们不像在他们的网站上发布他们的手册,所以希望你有内置的帮助或提供的有用的 PDF。
-
...实际上,我想我看到了问题所在。我会尽快发布答案,希望对您有所帮助。
标签: c singly-linked-list