2014-10-22 2 views
0

연결된 목록을 사용할 때 딥 복사를 수행하는 데 많은 어려움이 있습니다. 나는 꽤 문제가 otherList.listData->를 사용하는 것이 나에게 값을 복사하는 것이 아니라 원래의리스트에있는 데이터에 대한 포인터를주는 것이라고 확신한다. 그러나 나는 그 데이터에 직접적으로 어떻게 접근 할 수 있는지에 대해 당황 스럽다. 나는 당신이 그 포인터를 derefence 수 있다고 생각했지만 그 구문에 대한 잘못된 구문이 있어야합니다. CourseList 클래스에서 필요로하는 데이터에 대한 get/set 메서드도 없습니다.연결된 목록이있는 Ctor 복사

아무도 아이디어가 있습니까 ???

헤더 파일

class CourseList 
{ 
    private: 
    struct CourseNode 
    { 
     int CRN; 
     char letterGrade; 
     CourseNode *next; 
    }; 
    int length; 
    CourseNode *listData; 
public: 
    CourseList(); 
    CourseList(const CourseList& otherList); 
    ~CourseList(); 




}; 

CPP

CourseList::CourseList(const CourseList& otherList) 
{ 
length = otherList.length; 

for (int i = 0; i < length; i++) 
{ 
    CourseNode* temp = new CourseNode; 
    temp->CRN = otherList.listData->CRN; 
    temp->letterGrade = otherList.listData->letterGrade; 
    temp->next = otherList.listData->next; 
    listData = temp; 
} 

} 
+0

당신이 [이 뭔가를 (할 노력하고 확신 http://ideone.com/ :

대신에, 당신은 당신의 반복, 즉, 이런 일에 그 설정해야합니다 JcFPfR). – WhozCraig

답변

1

귀하의 복사 생성자 파일이 분류됩니다 대신 첫 번째 요소의 listData에 마지막 요소를 할당 끝납니다. 즉, 목록의 마지막 요소를 제외하고 모두 누출되었음을 의미합니다. 또한 new CourseNode을 만들 때마다 정확히 next 포인터를 똑같은 것으로 지정합니다 - 복사 된 모든 요소에 대해!

+0

잠시 그 ​​부분을 무시하고 나중에 그 부분을 고칠 수 있습니다. 원래 질문에 대한 아이디어가 있습니까? – Bagelstein

+0

나는 이해하지 못한다. 나는 코드가 심각하게 부서진 특정 장소에 대해 이야기하고있다. 당신은 그것을 무시하고 집중하기를 원한다. –

+0

내 문제는 내가 값을 할당하는 방법으로 생각하고 나머지는 걱정하지 않았지만 내 할당은 괜찮 았고 내 오류는 포인터 업데이트와 관련이있는 것으로 보입니다. 다른 사람이이 일을 도우려고했지만 지금은 한 시간 이상 예를 들고 일해 왔으며 운이 전혀 없었습니다. 좀 더 길 안내를 해 줄 수있는 기회라도 있으십니까? – Bagelstein

0

next 회원의 값을 복사 할 수 없습니다. 원래 목록을 가리키고 있기 때문입니다.

CourseNode *node = 0; 
CourseNode *src = otherList.listData; 
for (int i = 0; i < length; ++i) 
{ 
    CourseNode *next = new CourseNode(); 
    if (node) 
     node->next = next; // already a previous node; update it 
    else 
     listData = next; // no previous node; set the very first one 

    next->previous = node; // optional in case your list is a double linked list 

    // now populate "node" with the original values (i.e. the actual copy operation) 
    node->CRN = src->CRN; 
    node->letterGrade = src->letterGrade; 

    // switch to the next source node 
    src = src->next; 
} 
+0

원래 값의 인구는 내가 가지고있는 어려움입니다. 그래, 내가 노드들 사이에서 움직이는 방법에 실수가있다. 그런 종류의 문제는 내가 가진 문제로 인해서 얻지 못했다. 어떤 아이디어? – Bagelstein

+0

@ user3889565 코드 스 니펫을 해당 부분으로 업데이트했습니다. 단순히 복사하고 사용하기 전에 어떤 일이 벌어지고 있는지 이해하려고 노력하십시오. :) – Mario

+0

에 따르면 나는 otherList.listData-> CRN 등을 사용하는 것이 옳았습니다. 불행하게도 조정을 할 때도 노드가 올바르게 업데이트 될 때도 여전히 동일한 액세스 위반 오류가 발생합니다. 나는 내가 추측 하는대로 계속 조정해야 할 것이다. – Bagelstein

관련 문제