2016-10-14 4 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); 

링크 된 목록 CPP 나는 그것을 파악하는 관리되는 응답에 대한 주요

#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

감사합니다, 나는이 문제에 더 많은 빛을 기다리고 있었다

#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; 
} 

하지만, 아웃. 또한 위에 게시 된 코드가 전체 코드가 아님을 추가하는 것을 잊어 버렸습니다. (문제가 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; 
} 

오해의 소지가있는 게시물과 도움에 감사드립니다.