Потенциально, проблема заключается в следующем:
if(node->data== given)
{
node= node->next;
delete temp;
temp= nullptr;
}
temp
теперь возможно nullptr
. Попытка получить доступ к члену nullptr
приведет к сбою вашей программы.
Самое простое решение - добавить еще один код:
SNode <Object>* temp= node;
if(node->data== given)
{
node= node->next;
delete temp;
temp= nullptr;
} else {
while(temp->next!= nullptr) //this the problematic line
{
if(temp->next->data== given)
{
SNode<Object>* t= temp->next;
temp->next= temp->next->next;
delete t;
t= nullptr;
}
temp= temp->next;
}
}
Хотя, если по какой-либо причине узел является nullptr
, это все равно вызовет сбой вашей программы, так что вам, вероятно, лучше всего сначала проверить temp
:
SNode <Object>* temp= node;
if(node->data== given)
{
node= node->next;
delete temp;
temp= nullptr;
}
if(temp != nullptr) {
while(temp->next!= nullptr) //this the problematic line
{
if(temp->next->data== given)
{
SNode<Object>* t= temp->next;
temp->next= temp->next->next;
delete t;
t= nullptr;
}
temp= temp->next;
}
}
Это имеет преимущество в том, что не дает сбоя, даже если nullptr
передается в функцию для начала.