Вы разыменовываете указатели без проверки null
:
while(!(*cur==val)){
if(val.priority < cur->priority){
parent = cur;
cur = cur->left;
}
else{
parent = cur;
cur = cur->right;
}
}
Если cur->left
или cur->right
равны null
(я полагаю, это указатели), доступ к ним в *cur
будет segfault .
Здесь:
else if(cur->right && cur->left){ // 2 child nodes
TaskItem* success = cur->right;
TaskItem* par_success = cur;
while(!success->left){
par_success = success;
success = success->left;
}
Вы напрямую обращаетесь к указателю null
. Если cur->right->left
(success->left
) равно null
, вы получите доступ к указателю null
в следующей итерации.