Правя сортиране на кофа, сортирайки указатели към възли в свързан списък с фиктивна заглавка. Потребителят въвежда стойностите за възлите и след това те веднага се пускат в съответната кофа. Проблемът ми възниква, когато се опитвам да разпределя паметта за втория възел (без да включвам фиктивната заглавка) за свързания списък.
Това е кодът, използван за пускане на възлите в кофата, като 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 на втория възел (със същата стойност като първия), адресът на bucket[value]->next беше нормален адрес, но след това адресът беше 17. Тази стойност от 17 се появи във всеки един тест, който направих.
Всяка помощ или идеи биха били чудесни. Благодаря ви предварително.
sizeof nodeptr
? Нямате ли предвидsizeof node
илиsizeof *newNode
? - person Zeta   schedule 28.05.2013malloc
, това може да скрие фини грешки. - person Jens Gustedt   schedule 28.05.2013