2016-10-14 2 views
-1

Я написал этот код для двойного списка, но в соответствии с инструментом отладки есть некоторые ошибки сегментации. Компиляция отлично, но взрывается при запуске.Инициализация двойного списка

заголовочный файл

#ifndef LIST_H_INCLUDED 
#define LIST_H_INCLUDED 


struct Node 
{ 
    int data; 
    Node* next; //next node 
    Node* prev; //prev node 
}; 

typedef struct 
{ 
    Node* first; //aims to first node 
    Node* last; //aims to last node 
} List; 

void initList(List &l); 

Связанный список каст

#include <cstddef> 
#include "List.h" 

void initList(List &l) 
{ 
    l.first->data = -1; 
    l.first = NULL; 
    l.first->prev = NULL; 

    l.last->data = -2; 
    l.last->next = NULL; 
    l.last->prev = NULL; 
} 

основные

#include <iostream> 
    #include <stdio.h> 
    #include "List.h" 


    using namespace std; 

    int main() 
    { 
     List nlist; 

     initList(nlist); 

     return 0; 
    } 
+0

* Компиляция отлично, но взрывается при запуске * - «Компиляция штрафа» на самом деле ничего не значит. Все это означает, что ваш синтаксис C++ является законным - он не имеет никакого отношения к тому, есть ли у вас логические или другие ошибки времени выполнения. Также 'typedef struct' -' C'. Какая книга (ы) учит вас старому C-образному кодированию? – PaulMcKenzie

+1

Вам не хватает следующих ключевых понятий, которые вам необходимо полностью понять, прежде чем вы сможете реализовать свой связанный список: 1. Конструкция и инициализация классов; 2. Автоматический и динамический охват. Вы, очевидно, не узнали, что ваши члены списка должны быть созданы. Вам нужно вернуться и перечитать соответствующие главы в своей книге на C++. С показанным кодом слишком много проблем. –

+0

Это также очевидный случай связанного списка, который не связан. OP NULLing указатели не означают, что они инициализируются каким-либо разумным в контексте связанного списка. Рекомендация, которую OP читает по этой теме, сохраняется. Очевидно, что они еще не поняли. – user4581301

ответ

0

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

Ошибка сегментации была из оператора if, который был задействован в многие другие функции.

конструктор, о котором вы говорили.

Node* initNode(int data) 
{ 
    Node* nNode = new Node; 
    nNode->data = data; 
    nNode->next = NULL; 
    nNode->prev = NULL; 

    return nNode; 
} 

и функция, где на самом деле была ошибка сегментации.

bool isEmpty(List l) 
{ 
    if((l.first->next == NULL) && (l.last->prev == NULL)) 
    { 
     return true; 
    } 
    else 
     return false; 
} 

Извините за вводящий в заблуждение пост и спасибо за помощь.

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