2015-06-30 2 views
0

Im пытается сделать сортировку вставки, используя связанный список, но этот код, похоже, имеет ошибку времени выполнения.Ошибка выполнения во вставке sort

void Insert(int data) 
{ 

    node* temp=new node(); 
    temp->data=data; 
    temp->link=NULL; 
    if(head==NULL) 
    { 
     head=temp; 
     return; 
    } 
    node* current=head; 
    if(current->data>data) 
    { 
     temp->link=head; 
     head=temp; 
     return; 
    } 
    else 
    { 
     current=head; 
     node* trail=head; 
     while(current->data<=data) 
     { 
      trail=current; 
      current=current->link; 
     } 
     trail->link=temp; 
     temp->link=current; 
    } 
} 

ответ

1

Ваша проблема в блоке else вашего второго, если.

Вы перебираете список, и все кажется прекрасным ... но что произойдет, если вы дойдете до конца списка и current->data все еще меньше или равно data ?? О, о! current = current->link, текущий будет NULL, поэтому следующий current->data будет пытаться разыменовать нулевой указатель!

Просто добавьте чек, что в вашем состоянии цикла и все будет радужно:

while(current && current->data <= data) { 

Это выражение теперь будет короткое замыкание, если current является пустым указателем, избавляя вас от этой проблемы.

0

Не уверен, если это единственная ошибка, но:

current=head; 
    node* trail=head; 
    while(current->data<=data) // <-- This doesn't check if current->link is NULL 
    { 
     trail=current; 
     current=current->link; /// <-- If current is NULL this would explode 
    } 
    trail->link=temp; 
    temp->link=current; 
Смежные вопросы