2014-10-27 1 views
0

Просто так вы все знаете, что это проблема домашних заданий, и я потратил часы, пытаясь понять эту мелочь. Мой pop() не будет работать. Это мой текущий код pop():Stack.Pop() используя LinkedList

StackElement Stack::Pop(){ 

Position temp; 
temp = stack.CurrentEntry(); 
stack.Delete(); 
return temp;} 

Я использую Delete(), который связанный список, основанный delete() функция, которая идет как это:

void LinkedList::Delete(){ 

if (current == first && AtEnd()){ 
    // Remove the memory allocation for the element's data 
    delete &current->data; 

    // Reset all values of the linked list to original (null) state 
    current = NULL; 
    pred = NULL; 
    first = NULL; 
} 
else 
    // Checks if the current element is the first node in the lists 
    if (current == first){ 
     // Make new first element to be the next element 
     first = current->next; 

     // Remove the memory allocation for the element's data 
     delete &current->data; 

     // The new current entry is the successor of the deleted node. 
     current = first; 
    } 
    // When the element you're deleting is not the first node in list 
    else{ 
     assert(!Empty()); 
     // Temporary node to prevent current from being marroned 
     Node *tempNode = current->next; 

     pred->next = tempNode; 

     // Remove the memory allocation for the element's data 
     delete &current->data; 
     current = tempNode; 

    } 
} 

Когда я компилирую, он бросает мне эту ошибку здесь :

Необработанное исключение в 0x003E5F79 в Program5_test.exe: 0xC0000005: место записи нарушения доступа 0xF495EE12.

Любая помощь будет принята с благодарностью.

+1

'удаление & текущий-> данные' - одна проблема. Это должно быть либо 'delete current-> data', либо' delete current'. Скорее всего, 'delete current'. –

+1

Мы не знаем типы, но 'delete & current-> data;' выглядит неправильно (почему амперсанд?) – John3136

ответ

0

Вы не показывали нам CurrentEntry, но я уверен, что он просто возвращает указатель вместо полной копии. Затем вы удаляете оригинал, оставляя указатель ничем. Он сбой, когда вы используете указатель, возвращенный из Pop.