2016-04-09 41 views
0

C++でリンクリストを実装しようとしています。以下は、私のコードであり、私はこの例外にC++ LinkedListエラー:アクセス違反エラー

First-chance exception at 0x012F4C61 in LinkedList.exe: 0xC0000005: Access violation reading location 0xCDFCA94C.

ヘッダファイル

#pragma once 
#include "LinkNode.h" 

class LinkedList 
{ 
private: 
    LinkNode *head; 
    LinkNode *tail; 
    public: 
    LinkNode add(int data); 
    void print(); 
    LinkNode getHead(); 
    LinkedList(void); 
    ~LinkedList(void); 

    private: 
    void modify(); 
}; 

CPPファイル

#include "stdafx.h" 
#include "LinkedList.h" 
#include <iostream> 

using namespace std; 

LinkedList::LinkedList(void) 
{ 
this->head = NULL; 
this->tail = NULL; 
} 

LinkedList::~LinkedList(void) 
{ 
} 


LinkNode LinkedList :: add(int data) 
{ 
    if(this->head == NULL) 
    { 
    this->head = new LinkNode(data); 
    this->tail = head; 
    return *head; 
} 
else 
{ 
    LinkNode node(data); 
    tail->next = &node; 
    tail = tail->next; 
} 
} 

主な機能

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    LinkedList linklist; 
    linklist.add(1); 
    linklist.add(2); 
    linklist.add(3); 
    linklist.add(4); 
    linklist.add(5); 
    linklist.print(); 
    system("pause"); 
} 
+0

'LinkedList :: add'関数を詳しく見てみましょう。リストが空でないときはどうしますか? *動的に*ノードを割り当てるはずですか? –

答えて

2
LinkNode node(data); 
tail->next = &node; 
tail = tail->next; 
を取得しています

nodeは、スタック上に存在し、制御が終了するとそのメンバーの機能が終了します。代わりにtail->nextノードを動的に割り当てます。

またデストラクタが適切に動的に取得したリソースの割り当てを解除する必要があります。現在、プログラムにはメモリリークがあります。

関連する問題