

C++を学習中にLinkedListを作成してみたのですが、メモリリークが起きてしまい、解決方法がわかりません。いろいろ試してはみたのですが、どうしてもわからないのでご教授いただければ幸いです。

追記：  
信用度が足りずコメントができないのでこちらから失礼いたします。ご回答ありがとうございます。メモリリークしているのかもと思ったのはログで普段は出てこなかった
The thread 0x6734 has exited with code -1073741510
(0xc000013a).が出てきたためなのですが、いま改めて確認してみたら、メモリリークがある場合はDetected memory
leaks!と出るのですね。まったくの勘違いでした。ありがとうございました。Insertの実装についても、調べてみます。

[code]

    // LinkedList.cpp : Defines the entry point for the console application.
    //
    #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>  
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Node {
        int data;
        class Node* next;
    
    public:
        Node(int param) {
            data = param;
            next = nullptr;
        }
    
        ~Node() {
            if (next != nullptr)
                next = nullptr;
        }
    
        void SetData(int param) {
            this->data = param;
        }
    
        int GetData() {
            return this->data;
        }
    
    
        void SetNext(Node* param) {
            this->next = param;
        }
    
        Node* GetNext() {
            return this->next;
        }
    
    };
    
    class LinkedList {
    
    private:
    
        Node* head = nullptr;
        Node* tail = nullptr;
    
    public:
        LinkedList() {}
        ~LinkedList() {
            Node* node = head;
            while (node != nullptr) {
                Node* next = node->GetNext();
                delete node;
                node = next;
            }
        }
    
        void Add(int value) {
            if (head == nullptr) {
                head = new Node(value);
                tail = head;
            }
            else {
                Node* next = new Node(value);
                tail->SetNext(next);
                tail = next;
            }
        }
    
        bool Insert(int value, int index) {
            Node* node = head;
            if (index == 0) {
                Node* target = new Node(value);
                target->SetNext(head);
                head = target;
                return true;
            }
    
            for (int i = 0; i < index-1; i++) {
                if (node == nullptr) {
                    return false;
                }
    
                Node* next = node->GetNext();
    
                if (next == nullptr) {
                    break;
                }
    
                node = node->GetNext();
            }
    
            Node* target = new Node(value);
            target->SetNext(node->GetNext());
            node->SetNext(target);
            return true;
        }
    
        void Print() {
            Node* node = head;
            while (node != nullptr) {
                cout << node->GetData() << endl;
                node = node->GetNext();
            }
        }
    };
    
    
    int main()
    {
        LinkedList* li = new LinkedList();
        li->Add(1);
        li->Add(2);
        li->Add(3);
        li->Insert(0, 0);
        li->Insert(7, 2);
    
        li->Print();
    
        delete li;
    
        _CrtDumpMemoryLeaks();
        getchar();
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2018-03-01T00:58:35.980
42063
2018-03-02T23:49:35.383
2018-03-02T21:47:24.547
27578
27573
question
c++
C++でメモリリークしている箇所がわからない


> メモリリークしているのかもと思ったのはログで普段は出てこなかった The thread 0x6734 has exited with code
> -1073741510 (0xc000013a).が出てきたため

[0xc000013aは`STATUS_CONTROL_C_EXIT`](https://msdn.microsoft.com/en-
us/library/cc704588.aspx)で

> {Application Exit by CTRL+C} The application terminated as a result of a
> CTRL+C.

という意味だそうです。心当たりはないでしょうか？


CC BY-SA 3.0
2018-03-02T23:49:35.383
42101
2018-03-02T23:49:35.383
4236
42063
answer