Я думаю, ваш алгоритм неверен:
int y = 0;
cur = start;
do
{
....
cur = cur->node; // at the end of the list cur->node is NULL
} while (cur->node != NULL); // and here you dereference the null pointer
вы, вероятно, хотите это:
...
cur = start;
do
{
....
cur = cur->node;
} while (cur != NULL)
или, может быть, даже это:
...
cur = start;
while (cur != NULL)
{
....
cur = cur->node;
}