Я делаю сортировку ведра, сортируя указатели на узлы в связанный список с фиктивным заголовком. Пользователь вводит значения для узлов, а затем они сразу же помещаются в соответствующее ведро. Моя проблема возникает, когда я пытаюсь выделить память для второго узла (не включая фиктивный заголовок) для связанного списка.
Это код, используемый для добавления узлов в корзину, где 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);
}
С помощью операторов трассировки я обнаружил, что до Malloc второго узла (с тем же значением, что и у первого) адрес ведра [значение] -> следующий был обычным адресом, но после этого адрес был 17. Это значение 17 подошел в каждом тесте, который я сделал.
Любая помощь или идеи были бы замечательными. Заранее спасибо.
sizeof nodeptr
? Вы имеете в видуsizeof node
илиsizeof *newNode
? - person Zeta   schedule 28.05.2013malloc
, это может скрыть тонкие ошибки. - person Jens Gustedt   schedule 28.05.2013