lastPtr
должно быть инициализировано нулем в for
-loop.
Рассмотрим && r > currPtr->v
как ложное на 2-й (3-й ...) итерации цикла for
. Учтите, что на предыдущей итерации цикл while
был выполнен один или несколько раз, поэтому lastPtr
имеет значение.
Затем на этой итерации, где && r > currPtr->v
равно false, старое значение lastPtr
используется в части else
, где оно должно было быть нулевым.
Итак:
for(int i = 0; i < N; i++){
lastPtr = NULL;
currPtr = *startPtr;
... а потом я запустил его в отладчике и обнаружил также:
newPtr = malloc(sizeof(Node));
newPtr->v = r;
newPtr->nextPtr = currPtr; // set it here
if(lastPtr == NULL){
*startPtr = newPtr; // because here it is needed too
}
else{
lastPtr->nextPtr = newPtr; // and no lomger needed here
}
Я обнаружил случай, когда rand()
вернул ноль и новый узел должен был быть вставлен впереди.