2014-03-23 2 views
0

вывод: место для обнаружения нарушения доступа 0x0093F3DC.указатели C++ - место обнаружения нарушения прав доступа

Я не могу найти проблему. голова и следующие указатели инициализируются нулевым значением в соответствующих конструкторах.

class List{ 
public: 
    node *head; 
    List(void) // Constructor  
    { 
     head = NULL; 
    } 
    void insertNode(int f) 
    { 
     node *newNode; 
     newNode=new node(); 
     newNode->value = f; 
     newNode->next=head; 
     head=newNode; 
    } 
    void displayList() 
    { 
     node *ptr=head; 
     while (ptr!=NULL) 
     { 
      cout<<ptr->value<<endl; 
      ptr=ptr->next; 
     } 
    } 

    bool search(int val) 
    { 
     node *ptr= head; 
     while (ptr!=NULL) 
     { 
      if(ptr->value == val) 
      { 
       return true; 
      } 
      ptr=ptr->next; 
     } 
     return false; 
    } 

};

+4

Вы назначаете объект-узел на ptr, а затем переписываете его с помощью этого-> head. В чем смысл этого? Правильно ли ptr-> next? Вот почему вы используете отладчик для выполнения кода и пример значений переменных. – OldProgrammer

+2

Этот код недостаточно для правильного ответа. –

+0

Хотя эта функция имеет утечку памяти, тем не менее вы должны показать, как добавить узлы в список. –

ответ

0

Скорее всего, лучше объявить только указатель вместо выделения экземпляра узла, а затем уничтожить вновь выделенную память (например, вызывая потерю памяти обвисшей памяти). Например:

bool search(int val) 
{ 
    // 
    // Declare the pointer to traverse the data container, assign to the head 
    // This works only if head is valid. It is assumed that head is pointing 
    // to valid memory by the constructor and/or other class member functions. 
    // 
    node *ptr = this->head; 
    while (ptr!=NULL) 
    { 
     if(ptr->value == val) 
     { 
      return true; 
     } 
     ptr=ptr->next; 
    } 
    return false; 
} 

В деталях реализации класса выше, внутренний указатель головы всегда назначается памяти newNode внутри InsertNode. Следовательно, голова перемещается при каждом вызове InsertNode. Является ли это желаемой функциональностью?

+0

Я не нахожу никакой разницы. мой код кажется таким же, как и –

+0

, он просто добавляет newNode в начало списка. –

+0

@SohaibJamal Скорее всего, поведение конкретного связанного списка должно быть показано в исходном вопросе, чтобы все остальные поняли. Предполагается ли, что обычное однопользовательское поведение списков реализовано? Нам нехорошо делать предположения относительно того, что мы показываем цели дизайна/поведения. Поэтому, пожалуйста, обновите исходное сообщение с ожидаемым и предполагаемым поведением. –

Смежные вопросы