我正在做一个桶排序,将指向节点的指针排序到一个带有虚拟标题的链表中。用户输入节点的值,然后立即将它们放入相应的存储桶中。当我尝试为链表的第二个节点(不包括虚拟标头)分配内存时,出现了我的问题。
这是用于将节点放入桶中的代码,var 是要排序的值,current 是要排序的新创建的节点:
void bucketSort(int var, nodeptr current)
if(!bucket[var])
{
buckets[var] = (nodeptr) malloc(sizeof(nodeptr));
buckets[var]->next = current;
bucketrear[var] = current;
}
else
{
bucketrear[var]->next = current;
bucketrear[var] = current;
}
}
这是用于创建新节点的代码的简化版本(较少值):
void addNode(int value)
{
nodeptr newNode;
newNode= (nodeptr) malloc(sizeof(nodeptr));
newNode->value = value;
newNode->next = NULL;
bucketDrop(value, newNode);
}
通过 Trace Statements 发现,在第二个 Node 的 Malloc 之前(与第一个相同的值),bucket[value]->next 的地址是正常地址,但之后地址是 17。这个值为 17在我做的每一个测试中都出现了。
任何帮助或想法都会很棒。先感谢您。